wxWidgets采用的是事件驱动型的编程机制。所谓事件,就是我们的程序在运行中发生的事儿。事件可以是低级的用户动作,如鼠标移动或按键按下,也可以是高级的用户动作(定义在wxPython的窗口部件中的),如单击按钮或菜单选择。事件可以产生自系统,如关机。你甚至可以创建你自己的对象去产生你自己的事件。事件会触发相应的行为,即事件函数。程序员的工作就是定义事件函数,以及绑定事件和事件函数之间的关联关系。
01.控件事件
图形用户接口(GUI)有一种元素叫控件。比如按钮、下拉框、列表框和图片等等。上一节我们用到的wx.frame框架,其实也是控件的一种。它们都是可以相应一些常见的事件。
02.鼠标事件
我们在上节程序的基础上绑定一个鼠标移动的事件,当鼠标在框架上移动,会显示当前鼠标在框架的坐标值。
import wx#mainFrame框架类,继承wx.Frameclass mainFrame(wx.Frame): #重构__init__函数 #当框架初始化时 def __init__(self, parent): #创建框架,设置标题 wx.Frame.__init__(self, parent, -1, "控件事件") #设置背景颜色 self.SetBackgroundColour(wx.Colour(224, 224, 224)) #设置框架大小 self.SetSize((520, 220)) #框架屏幕居中 self.Center() #当鼠标事件发生,将触发OnMouse函数 self.Bind(wx.EVT_MOUSE_EVENTS, self.OnMouse) #----------------------------------------------- #鼠标经过处理函数 def OnMouse(self,event): print(event.x,event.y) #-------------------------------------------#mainApp主程序类,继承wx.Appclass mainApp(wx.App): #当主程序创建时,响应Init函数 def OnInit(self): #主程序框由mainFrame创建 self.Frame = mainFrame(None) #显示主框架 self.Frame.Show() #必须返回True return True#-------------------------------------------if __name__ == '__main__': #创建一个主程序对象 app = mainApp() #主程序对象运行 app.MainLoop()
运行结果
当鼠标在框架上移动时,就是打印出当前所处的程序框架相对位置。
03.键盘事件
import wx#mainFrame框架类,继承wx.Frameclass mainFrame(wx.Frame): #重构__init__函数 #当框架初始化时 def __init__(self, parent): #创建框架,设置标题 wx.Frame.__init__(self, parent, -1, "控件事件") #设置背景颜色 self.SetBackgroundColour(wx.Colour(224, 224, 224)) #设置框架大小 self.SetSize((520, 220)) #框架屏幕居中 self.Center() #当键盘按下事件发生,将触发OnKeyDown事伯 self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) #----------------------------------------------- #键盘按下处理函数 def OnKeyDown(self,event): print(event.GetKeyCode()) #-------------------------------------------#mainApp主程序类,继承wx.Appclass mainApp(wx.App): #当主程序创建时,响应Init函数 def OnInit(self): #主程序框由mainFrame创建 self.Frame = mainFrame(None) #显示主框架 self.Frame.Show() #必须返回True return True#-------------------------------------------if __name__ == '__main__': #创建一个主程序对象 app = mainApp() #主程序对象运行 app.MainLoop()
程序运行结果
当我们按下键盘按钮,会输出相应的键值。
wxWidgets支持的事件很多,不同的事件有不同的用法,不同的控件也有不同的事件。下面的章节我们再一一解说。
关注我们