使用wx.EVT_BUTTON将事件绑定到wx.button directy?

时间:2016-08-02 06:02:18

标签: python wxpython

我阅读了几本wxPython书籍,现在我非常熟悉将按钮与事件绑定。比如在wx.Frame的__init__方法中,我写道:

self.btn = wx.Button(self, 2, "click me")
self.btn.bind(wx.EVT_BUTTON, self.onclick)

单击按钮时需要执行onclick

最近,我正在阅读某人的wxPython代码并遇到以下代码:

wx.Button(self, 2, "click me")
wx.EVT_BUTTON(self, 2, self.onclick)

作者使用上述方法为每个按钮绑定方法。因此,我有两个问题:

  1. wx.Button是通过不绑定任何变量来实例化的。这是否意味着它会被垃圾收集?
  2. 我找不到任何关于直接调用wx.EVT_BUTTON的文档。它实际上创造了什么?它与使用bind()函数有什么区别?

1 个答案:

答案 0 :(得分:1)

保罗的评论是正确的,但这里有更多信息:

要回答#1,不会收集垃圾。父窗口拥有按钮对象的C ++部分,该部分又引用了按钮对象的Python部分。因此,只要C ++对象发生,Python对象就会继续存在。

对于#2:差别很小。许多年前,wx中的wx.EVT_*项曾经是普通函数。现在它们是wx.PyEventBinder类的实例,它具有__call__方法以提供与旧函数的兼容性。但是正如Paul所提到的那样,使用带有Bindwx.Window方法的binder实例是首选,因为它更加pythonic并使代码更具自我解释性。