wxPython Demo 學習

第一個程序: "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, 但通常沒有必要這樣做。

運行該程序,你應該可以看到這樣一個窗口:


hello.png


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 知道如何在每一個平臺顯示這個組件,使其看起來更加自然。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章