我阅读了几本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)
作者使用上述方法为每个按钮绑定方法。因此,我有两个问题:
bind()
函数有什么区别?答案 0 :(得分:1)
保罗的评论是正确的,但这里有更多信息:
要回答#1,不会收集垃圾。父窗口拥有按钮对象的C ++部分,该部分又引用了按钮对象的Python部分。因此,只要C ++对象发生,Python对象就会继续存在。
对于#2:差别很小。许多年前,wx中的wx.EVT_*
项曾经是普通函数。现在它们是wx.PyEventBinder
类的实例,它具有__call__
方法以提供与旧函数的兼容性。但是正如Paul所提到的那样,使用带有Bind
类wx.Window
方法的binder实例是首选,因为它更加pythonic并使代码更具自我解释性。