第一個程序: "Hello, World"
依照傳統,我們首先編寫一個小小的 "Hello, world" 應用程序。代碼如下:
#!/usr/bin/env python
import wx
app = wx.App(False) # Create a new app, don't redirect stdout/stderr to a window.
frame = wx.Frame(None, wx.ID_ANY, "Hello World") # A Frame is a top-level window.
frame.Show(True) # Show the frame.
app.MainLoop()
程序說明:
app = wx.App(False) |
每一個wxPython app 都是 wx.App 的一個實例。 對於大多數簡單的應用程序來說,你可以使用 wx.App 原型。當你用到更復雜的應用程序時,你需要擴展 wx.App 類。參數 "False" 表示 "不要重定向stdout and stderr 到一個窗口"。 |
wx.Frame(None,wx.ID_ANY,"Hello") |
wx.Frame 是一個頂層窗口。語法是 x.Frame(Parent, Id, Title) 。大部分結構有這樣的形式 (一個父對象,後面跟一個ID)。在這個例子中,我們使用 None 表示沒有"父對象" , wx.ID_ANY 要求 wxWidgets 爲我們分配一個id。 |
frame.Show(True) |
我們通過"showing" 來顯示則個框架。 |
app.MainLoop() |
最後,我們啓動應用程序的 MainLoop 語句,它的作用是處理事件。 |
注:你幾乎總是需要使用 wx.ID_ANY 或者由 wxWidgets 提供的其他的 standard ID 。你也可以使用你自己的 IDs, 但通常沒有必要這樣做。
運行該程序,你應該可以看到這樣一個窗口:
Windows or Frames?
當人們談論 GUIs 的時候, 他們通常會說窗口,菜單和圖標。理所當然的,你期望 wx.Window 應該在屏幕上顯示一個窗口。不幸的是,情況並非如此。 wx.Window 是一個派生了所有的可視化元素 (按鈕, 菜單, 等)的基本類,我們通常認爲的程序窗口是一個 wx.Frame 。這個不幸的不一致給很多新用戶帶來了困惑。
構建一個簡單的文本編輯器
在本教程中我們將構建一個簡單的文本編輯器。在這個過程中,我們將會探討幾個小部件,並瞭解一些特性,如事件和回調。
第一步
第一部是做一個包含可編輯文本框的簡單框架。 文本框用到了 wx.TextCtrl 組件。 默認情況下,文本框是一個單行字段,但是wx.TE_MULTILINE 參數允許你輸入多行文本。
#!/usr/bin/env python
import wx
class MyFrame(wx.Frame):
""" We simply derive a new class of Frame. """
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(200,100))
self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE)
self.Show(True)
app = wx.App(False)
frame = MyFrame(None, 'Small editor')
app.MainLoop()
在這個例子中, 我們從 wx.Frame 派生並且重寫了 __init__ 方法。 這裏我們聲明瞭一個新的 wx.TextCtrl ,這是一個簡單的文本編輯控件。請注意:由於 MyFrame 在內置的 __init__ 方法運行了 self.Show() , 我們不需要再顯示的調用 frame.Show() 。
添加一個菜單欄
每個應用程序都應該有一個菜單欄和狀態欄。讓我們來把它們添加進來:
import wx
class MainWindow(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(200,100))
self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE)
self.CreateStatusBar() # A Statusbar in the bottom of the window
# Setting up the menu.
filemenu= wx.Menu()
# wx.ID_ABOUT and wx.ID_EXIT are standard IDs provided by wxWidgets.
filemenu.Append(wx.ID_ABOUT, "&About"," Information about this program")
filemenu.AppendSeparator()
filemenu.Append(wx.ID_EXIT,"E&xit"," Terminate the program")
# Creating the menubar.
menuBar = wx.MenuBar()
menuBar.Append(filemenu,"&File") # Adding the "filemenu" to the MenuBar
self.SetMenuBar(menuBar) # Adding the MenuBar to the Frame content.
self.Show(True)
app = wx.App(False)
frame = MainWindow(None, "Sample editor")
app.MainLoop()
提示: 請注意 wx.ID_ABOUT 和wx.ID_EXIT 標示。 這些是wxWidgets提供的標準IDS (see a full listhere)。 如果有可用的,使用標準標示是一個很好的習慣。 這有助於讓 wxWidgets 知道如何在每一個平臺顯示這個組件,使其看起來更加自然。