wxpython按钮事件处理_wxPython事件处理

本文介绍了wxPython中的事件驱动编程,重点讨论了按钮点击事件的处理和事件传播机制。通过示例展示了如何绑定事件处理方法,如wx.EVT_BUTTON与OnClick(),并解释了事件如何从控件传递到窗口及其父类。
摘要由CSDN通过智能技术生成

与以顺序方式执行的控制台模式应用程序不同,基于GUI的应用程序是事件驱动的。响应于用户的操作(如单击按钮,从集合或鼠标点击中选择一个项目等)来执行函数或方法,称为事件。

与在应用程序运行时发生的事件相关的数据被存储为从wx.Event派生的子类的对象。显示控件(如Button)是特定类型的事件源,并产生与其关联的Event类的对象。例如,点击一个按钮会发出一个wx.CommandEvent。该事件数据被分派到程序中的事件处理程序方法。wxPython有许多预定义的事件绑定。一个事件粘合剂封装了特定微件(对照),其相关联的事件类型和事件处理方法之间的关系。

例如,要在按钮的click事件上调用程序的OnClick()方法,需要以下语句 -

self.b1.Bind(EVT_BUTTON, OnClick)

Bind()方法由wx.EvtHandler类中的所有显示对象继承。EVT_.BUTTON这里是将按钮点击事件关联到OnClick()方法的活页夹。

在以下示例中,通过拖动顶级窗口(在这种情况下为wx.Frame对象)引起的MoveEvent使用wx.EVT_MOVE绑定器连接到OnMove()方法。代码显示一个窗口。如果使用鼠标移动,其瞬时坐标将显示在控制台上。

importwxclassExample(wx.Frame):def__init__(self,*args,**kw):super(Example,self).__init__(*args,**kw)self.InitUI()defInitUI(self):self.Bind(wx.EVT_MOVE,self.OnMove)self.SetSize((250,180))self.SetTitle("Move event")self.Centre()self.Show(True)defOnMove(self,e):x,y=e.GetPosition()print"current window position x = ",x," y= ",y

ex=wx.App()Example(None)ex.MainLoop()

上述代码产生以下输出 -

move_event.jpg

当前窗口位置x = 562 y = 309

当前窗口位置x = 562 y = 309

当前窗口位置x = 326 y = 304

当前窗口位置x = 384 y = 240

当前窗口位置x = 173 y = 408

当前窗口位置x = 226 y = 30

当前窗口位置x = 481 y = 80

从wx.Event继承的一些子类列在下表中:

以下是wx.Event最常用的事件

SN

Events & Description

1

wxKeyEvent

Occurs when a key is presses or released

2

wxPaintEvent

Is generated whenever contents of the window needs to be redrawn

3

wxMouseEvent

Contains data about any event due to mouse activity like mouse button pressed or dragged

4

wxScrollEvent

Associated with scrollable controls like wxScrollbar and wxSlider

5

wxCommandEvent

Contains event data originating from many widgets such as button, dialogs, clipboard, etc.

6

wxMenuEvent

Different menu-related events excluding menu command button click

7

wxColourPickerEvent

wxColourPickerCtrl generated events

8

wxDirFilePickerEvent

Events generated by FileDialog and DirDialog

wxPython中的事件有两种类型。基本事件和命令事件。一个基本的事件保留在它发生的窗口的本地。大多数wxWidgets生成命令事件。甲命令事件可以传播到窗口或窗口,这是在类层次结构的源窗口上方。

以下是事件传播的简单示例。完整的代码是 -

importwxclassMyPanel(wx.Panel):def__init__(self,parent):super(MyPanel,self).__init__(parent)b=wx.Button(self,label="Btn",pos=(100,100))b.Bind(wx.EVT_BUTTON,self.btnclk)self.Bind(wx.EVT_BUTTON,self.OnButtonClicked)defOnButtonClicked(self,e):print"Panel received click event. propagated to Frame class"e.Skip()defbtnclk(self,e):print"Button received click event. propagated to Panel class"e.Skip()classExample(wx.Frame):def__init__(self,parent):super(Example,self).__init__(parent)self.InitUI()defInitUI(self):mpnl=MyPanel(self)self.Bind(wx.EVT_BUTTON,self.OnButtonClicked)self.SetTitle("Event propagation demo")self.Centre()self.Show(True)defOnButtonClicked(self,e):print"click event received by frame class"e.Skip()ex=wx.App()Example(None)ex.MainLoop()

在上面的代码中,有两个类。MyPanel,一个wx.Panel子类和Example,一个wx.Frame子类,它是程序的顶级窗口。一个按钮放置在面板中。

此Button对象绑定到事件处理程序btnclk(),它将其传播到父类(在这种情况下为MyPanel)。按钮点击生成CommandEvent其可以通过跳过()方法被传播到它的父。

MyPanel类对象也将接收的事件绑定到另一个处理程序OnButtonClicked()。该函数又传递给其父类Example类。上述代码产生以下输出 -

event_handling_output.jpg

Button received click event. Propagated to Panel class.

Panel received click event. Propagated to Frame class.

Click event received by frame class.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值