1. 程式人生 > >Python程式設計之GUI--wxPython模組

Python程式設計之GUI--wxPython模組

    在Python中有很多GUI工具包或者構建器:tkinter,wxPython,PyQt,PythonCard,Dabo等,其中,tkinter是Python自帶的一個輕量級工具包,使用它可以輕易地實現基本的介面。但是,在跨平臺方面不如wxPython。

一、wxPython建立視窗

    使用wxPython建立一個最簡單的GUI視窗步驟如下:

import wx
class myApp(wx.App):
    def Oninit(self):
        frame=wx.Frame(self,parent=None,title='test1')
        frame.Show()
        return True

app=myApp()
app.MainLoop()

說明:

1、首先需要匯入wx模組。

2、使用一個類繼承wx.App,並重寫父類中的Oninit()方法,注意,在我們的程式中並不需要顯示的呼叫Oninit()方法,該方法會由父類的建構函式自動呼叫。

3、呼叫wx.Frame()函式建立一個窗體,其中parent是指要加到的那個窗體。

4、呼叫Show()方法使得該窗體可見。

5、return True使得可見的窗體一直可見,若改成False,則會閃滅。

6、呼叫MainLoop()方法。

    一般我們所需要的窗體需要新增各種按鈕等元件,這是就需要我們自己重寫一個類myFrame來繼承wx.Frame,需要注意的就是,在myFrame的建構函式中,一定不要忘記呼叫wx.Frame.__init__()函式,若不呼叫該建構函式,則Oninit()函式不會被自動呼叫。參考示例如下:

import wx
class Frame(wx.Frame):#繼承自wx的Frame的自己定義的Frame類
    def __init__(self,parent=None):
        wx.Frame.__init__(self,parent,title='',size=(600,370))#父類wx.Frame建構函式
        self.SetBackgroundColour('white')
        self.Center()
        self.InceptButton = wx.Button(parent=self,pos=(20,20),size=(80,50),label='')
       
class myApp(wx.App):
    def OnInit(self):
        self.frame=Frame()
        self.frame.Show()
        return True
app = myApp();
app.MainLoop()

二、wxPython事件監聽機制

    使用Bind()函式來新增監聽事件

Bind(event, handler, source=None, id=wx.ID_ANY, id2=wx.ID_ANY)

    1、event(事件型別):

         常見的有如下

EVT_SIZE 由於使用者干預或由程式實現,當一個視窗大小發生改變時傳送給視窗。 EVT_MOVE 由於使用者干預或由程式實現,當一個視窗被移動時傳送給視窗。 EVT_CLOSE 當一個框架被要求關閉時傳送給框架。除非關閉是強制性的,否則可以呼叫event.Veto(true)來取消關閉。 EVT_PAINT 無論何時當視窗的一部分需要重繪時傳送給視窗。 EVT_CHAR 當視窗擁有輸入焦點時,每產生非修改性(Shift鍵等等)按鍵時傳送。 EVT_IDLE 這個事件會當系統沒有處理其它事件時定期的傳送。 EVT_LEFT_DOWN 滑鼠左鍵按下。 EVT_LEFT_UP 滑鼠左鍵擡起。 EVT_LEFT_DCLICK 滑鼠左鍵雙擊。 EVT_MOTION 滑鼠在移動。 EVT_SCROLL 滾動條被操作。這個事件其實是一組事件的集合,如果需要可以被單獨捕捉。 EVT_BUTTON 按鈕被點選。 EVT_MENU 選單被選中。

    2、handler(事件處理程式):是響應事件時所呼叫的函式,注意在這裡只需要函式名即可,不需要括號。

    3、source(事件源):指產生事件的元件,如按鈕等

    後面兩個引數可選。