wxPython:一曲MFC的挽歌,理想主义的绝唱( 五 )
鼠标事件:鼠标左右中键和滚轮动作 , 以及鼠标移动等事件
键盘事件:用户敲击键盘产生的事件
控件事件:发生在控件上的事件 , 比如按钮被按下、输入框内容改变等
系统事件:关闭窗口、改变窗口大小、重绘、定时器等事件
事实上 , 这个分类方法不够严谨 。 比如 , wx.Frame作为一个控件 , 关闭和改变大小也是控件事件 , 不过这一类事件通常都由系统绑定了行为 。 基于此 , 可以重新定义所谓的控件事件 , 是指发生在控件上的、系统并未预定义行为的事件 。
常用的鼠标事件包括:
wx.EVT_LEFT_DOWN-左键按下
wx.EVT_LEFT_UP-左键弹起
wx.EVT_LEFT_DCLICK-左键双击
wx.EVT_RIGHT_DOWN-右键按下
wx.EVT_RIGHT_UP-右键弹起
wx.EVT_RIGHT_DCLICK-右键双击
wx.EVT_MOTION-鼠标移动
wx.EVT_MOUSEWHEEL-滚轮滚动
wx.EVT_MOUSE_EVENTS-所有的鼠标事件
常用的键盘事件有:
wx.EVT_KEY_DOWN-按键按下
wx.EVT_KEY_UP-按键弹起
常用的系统事件包括:
wx.EVT_CLOSE-关闭
wx.EVT_SIZE-改变大小
wx.EVT_TIMER-定时器事件
wx.EVT_PAINT-重绘
wx.EVT_ERASE_BACKGROUND-背景擦除
常用的控件事件包括:
wx.EVT_BUTTON-点击按钮
wx.EVT_CHOICE-下拉框改变选择
wx.EVT_TEXT-输入框内容改变
wx.EVT_TEXT_ENTER-输入框回车
wx.EVT_RADIOBOX-单选框改变选择
wx.EVT_CHECKBOX-点击复选框
4.2事件绑定
事件驱动机制有三个要素:事件、事件函数和事件绑定 。 比如 , 当一个按钮被点击时 , 就会触发按钮点击事件 , 该事件如果绑定了事件函数 , 事件函数就会被调用 。 所有的事件函数都以事件对象为参数 , 事件对象提供了事件的详细信息 , 比如键盘按下事件的事件对象就包含了被按下的键的信息 。
下面这个例子演示了如何定义事件函数 , 以及绑定事件和事件函数之间的关联关系 。
importwxclassMainFrame(wx.Frame):"""从wx.Frame派生主窗口类"""def__init__(self,parent):"""构造函数"""wx.Frame.__init__(self,parent,style=wx.DEFAULT_FRAME_STYLE)self.SetTitle('事件和事件函数的绑定')self.SetIcon(wx.Icon('res/wx.ico'))self.SetBackgroundColour((224,224,224))#设置窗口背景色self.SetSize((520,220))self._init_ui()self.Center()def_init_ui(self):"""初始化界面"""wx.StaticText(self,-1,'第一行输入框:',pos=(40,50),size=(100,-1),style=wx.ALIGN_RIGHT)wx.StaticText(self,-1,'第二行输入框:',pos=(40,80),size=(100,-1),style=wx.ALIGN_RIGHT)self.tip=wx.StaticText(self,-1,u'',pos=(145,110),size=(150,-1),style=wx.ST_NO_AUTORESIZE)self.tc1=wx.TextCtrl(self,-1,'',pos=(145,50),size=(150,-1),name='TC01',style=wx.TE_CENTER)self.tc2=wx.TextCtrl(self,-1,'',pos=(145,80),size=(150,-1),name='TC02',style=wx.TE_PASSWORD|wx.ALIGN_RIGHT)btn_mea=wx.Button(self,-1,'鼠标左键事件',pos=(350,50),size=(100,25))btn_meb=wx.Button(self,-1,'鼠标所有事件',pos=(350,80),size=(100,25))btn_close=wx.Button(self,-1,'关闭窗口',pos=(350,110),size=(100,25))self.tc1.Bind(wx.EVT_TEXT,self.on_text)#绑定文本内容改变事件self.tc2.Bind(wx.EVT_TEXT,self.on_text)#绑定文本内容改变事件btn_close.Bind(wx.EVT_BUTTON,self.on_close,btn_close)#绑定按键事件btn_close.Bind(wx.EVT_MOUSEWHEEL,self.on_wheel)#绑定鼠标滚轮事件btn_mea.Bind(wx.EVT_LEFT_DOWN,self.on_left_down)#绑定鼠标左键按下btn_mea.Bind(wx.EVT_LEFT_UP,self.on_left_up)#绑定鼠标左键弹起btn_meb.Bind(wx.EVT_MOUSE_EVENTS,self.on_mouse)#绑定所有鼠标事件self.Bind(wx.EVT_CLOSE,self.on_close)#绑定窗口关闭事件self.Bind(wx.EVT_SIZE,self.on_size)#绑定改变窗口大小事件self.Bind(wx.EVT_KEY_DOWN,self.on_key_down)#绑定键盘事件defon_text(self,evt):"""输入框事件函数"""obj=evt.GetEventObject()objName=obj.GetName()text=evt.GetString()ifobjName=='TC01':self.tc2.SetValue(text)elifobjName=='TC02':self.tc1.SetValue(text)defon_size(self,evt):'''改变窗口大小事件函数'''print('你想改变窗口 , 但是事件被Skip了 , 所以没有任何改变')evt.Skip()#注释掉此行(事件继续传递) , 窗口大小才会被改变defon_close(self,evt):"""关闭窗口事件函数"""dlg=wx.MessageDialog(None,'确定要关闭本窗口?','操作提示',wx.YES_NO|wx.ICON_QUESTION)if(dlg.ShowModal()==wx.ID_YES):self.Destroy()defon_left_down(self,evt):"""左键按下事件函数"""self.tip.SetLabel('左键按下')defon_left_up(self,evt):"""左键弹起事件函数"""self.tip.SetLabel('左键弹起')defon_wheel(self,evt):"""鼠标滚轮事件函数"""vector=evt.GetWheelRotation()self.tip.SetLabel(str(vector))defon_mouse(self,evt):"""鼠标事件函数"""self.tip.SetLabel(str(evt.EventType))defon_key_down(self,evt):"""键盘事件函数"""key=evt.GetKeyCode()self.tip.SetLabel(str(key))if__name__=='__main__':app=wx.App()frame=MainFrame(None)frame.Show()app.MainLoop()代码运行界面如下图所示 。
- 中兴超越中兴:夯实第一曲线 发力第二曲线
- 抖音回首大唐盛世千百年逢君天涯不过一瞬间一曲悠扬沧海复桑田江湖故人念是什么歌 歌曲分享
- Facebook|Facebook 大宕机:远程工作的一曲悲歌
- dns|Facebook 大宕机:远程工作的一曲悲歌
- 独家|腾讯音乐:一曲肝肠断,美股何处觅知音?
- 抖音江上一曲低诵晚风唱出心伤才知情浓鸳鸯离散谁知其中饱尝辛酸谁人能懂是什么歌 歌曲分享