wxpython关闭窗口_wxpython入门第三步(事件)

wxPython中的事件

事件是每个GUI应用程序不可缺少的一部分。所有GUI应用程序都是事件驱动的。一个应用程序对在其生命周期中产生的不同事件类型做出反应。事件主要由应用程序的用户产生。但它们也可以通过其他方式产生,例如互联网连接、窗口管理器或定时器。所以当我们调用MainLoop()方法时,我们的应用程序会等待事件的产生。当我们退出应用程序时,MainLoop()方法就结束了。

定义

事件是来自底层框架的一段应用级信息,通常是GUI工具包。事件循环是一种编程结构,它在程序中等待并派发事件或消息。事件循环反复寻找要处理的事件。派遣器是一个将事件映射到事件处理程序的过程。事件处理程序是对事件做出反应的方法。

事件对象是与事件相关联的对象。它通常是一个窗口。事件类型是一个已经生成的唯一事件。事件绑定器是将事件类型与事件处理程序绑定的对象。

wxPython wx.EVT_MOVE 例子

在下面的例子中,我们对wx.MoveEvent事件做出反应。当我们将一个窗口移动到一个新的位置时,就会产生这个事件。这个事件是wx.EVT_MOVE。

#evt_move.pyimport wxclass Example(wx.Frame):    def __init__(self, *args, **kw):        super(Example, self).__init__(*args, **kw)        self.InitUI()    def InitUI(self):        wx.StaticText(self, label='x:', pos=(10,10))        wx.StaticText(self, label='y:', pos=(10,30))        self.st1 = wx.StaticText(self, label='', pos=(30, 10))        self.st2 = wx.StaticText(self, label='', pos=(30, 30))        self.Bind(wx.EVT_MOVE, self.OnMove)        self.SetSize((350, 250))        self.SetTitle('Move event')        self.Centre()    def OnMove(self, e):        x, y = e.GetPosition()        self.st1.SetLabel(str(x))        self.st2.SetLabel(str(y))def main():    app = wx.App()    ex = Example(None)    ex.Show()    app.MainLoop()if __name__ == '__main__':    main() 
40c4806a5cf5d77bd8e0481ed6d4ae54.png

该示例显示窗口的当前位置。

self.Bind(wx.EVT_MOVE, self.OnMove)

这里我们将wx.EVT_MOVE事件绑定到OnMove()方法。

def OnMove(self, e):    x, y = e.GetPosition()    self.st1.SetLabel(str(x))    self.st2.SetLabel(str(y))

OnMove()方法中的事件参数是一个特定事件类型的对象。在我们的例子中,它是一个wx.MoveEvent类的实例。这个对象保存了有关事件的信息,例如事件对象或窗口的位置。在我们的例子中,事件对象是 wx.Frame 组件。我们可以通过调用事件的GetPosition()方法找出当前位置。

wxPython 事件binding

wxPython中处理事件的三个步骤是。

  • 确定事件binder名称:wx.EVT_SIZEwx.EVT_CLOSE等。
  • 创建一个事件处理程序。当一个事件生成时,该方法被调用。
  • 将一个事件绑定到一个事件处理程序。

在wxPython中,我们说要把一个方法绑定到一个事件上。有时会使用hook这个词。你可以通过调用Bind()方法来绑定一个事件。该方法有以下参数。

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

event是EVT_*对象之一。它指定了事件的类型。handler是一个要被调用的对象,换句话说,它是一个与事件绑定的方法。source参数用于当我们想区分不同小组件的同一事件类型时。id参数用于我们有多个按钮、菜单项等时。id参数用于区分它们。id2用于当需要将一个处理程序绑定到一系列id时,例如EVT_MENU_RANGE

请注意,方法Bind()定义在类EvtHandler中。它是一个继承自wx.Window的类。wx.Window是wxPython中大多数组件的基类。还有一个反向过程。如果我们想从一个事件中解绑一个方法,我们调用Unbind()方法。它的参数和上面的方法一样。

Vetoing events(否决事件)

有时我们需要停止处理一个事件。为此,我们调用Veto()<

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值