wxpython应用采用事件驱动的方式来实现用户界面和wxpython系统的交互。
在wxpython应用程序中,一个事件是wx.Event类或者其子类的一个实例。通过一个时间的子类是无法区分更细的事件。一种做法是继续从时间子类中集成而得到更小的事件子类。但是wxpython采用了另外一种做法,即事件类型。通过事件类型可以识别在同一个事件类下的不同事件类型。
事件的绑定和处理:
通过使用wx.EvtHandler类中的Bind方法可以将绑定事件的类型,事件对象和事件处理函数关联起来。下面为此方法的函数定义:
Bind(event, handler ,source = None , id= wx.ID_ANY,id=wx.ID_ANY)
一般使用的是前三个参数。第一个参数为事件的类型,第二个参数为绑定此事件的处理函数,第三个参数默认为None,表示当前的Frame.
代码:
#encoding = utf-8
import wx
import time
class MyFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, -1,'Hello world',size=(300,300))
panel = wx.Panel(self)
sizer = wx.BoxSizer(wx.VERTICAL)
panel.SetSizer(sizer)
txt = wx.StaticText(panel, -1 ,'Hello world!')
sizer.Add(txt,0,wx.TOP|wx.LEFT,100)
button = wx.Button(panel,-1,'Quit')
sizer.Add(button,0,wx.TOP|wx.LEFT,100)
self.Bind(wx.EVT_BUTTON,self.OnClick,button)
self.Centre()
def OnClick(self,event):
self.Close(True)
class MyApp(wx.App):
def OnInit(self):
self.frame = MyFrame(None)
self.frame.Show(True)
return True
def OnExit(self):
time.sleep(2)
if __name__ == '__main__':
app = MyApp()
app.MainLoop()