我不确定我的问题是否清楚,所以我将再解释一点。
情况如下:
class Frame(wx.Frame):
def __init__(self, title):
[...]
self.Bind(wx.EVT_CLOSE, self.onclose)
def onclose(self, event):
"""
Close the program
"""
self.Destroy()
所以,在这段代码中,'event'是无用的,我不想调用它,但我还没有能够这样做。有什么我没有使用的"event"的用法吗?甚至有可能不调用"事件"吗?我还没找到办法。
谢谢!
在这种情况下,不使用event
,但在其他情况下,可以使用event
来了解onclose
函数的调用方式;导致函数执行的事件。如果您的事件是由鼠标单击引起的,您可以使用相同的功能使onClose
的行为与单击按钮不同。
event
是必需的,因为任何来自wx
的绑定都会将event
对象发送到被调用的函数,因此当您不能使用def onclose(self)
接受event
对象时
Bind
方法出于实际原因发送事件,因此您可以应用其他方法,如event。getposition()
或事件。getkey()
并在被调用的方法中进行比较。
你可以给它取任何你喜欢的名字,顺便说一下,把它命名为event只是惯例。
wxPython事件API要求它向事件处理程序发送一个事件。因此,当您执行Bind时,您将向事件处理程序发送某种类型的事件。
这里有一些链接可以帮助你更好地理解wxPython:
- http://wxpython.org/Phoenix/docs/html/events_overview.html
- http://zetcode.com/wxpython/events/
由于您不想遵循工具包的API,您可以滥用Python并做这样的事情:
import wx
########################################################################
class Example(wx.Frame):
""""""
#----------------------------------------------------------------------
def __init__(self):
"""Constructor"""
wx.Frame.__init__(self, None, title="test")
panel = wx.Panel(self)
btn = wx.Button(panel, label="Close")
btn.Bind(wx.EVT_BUTTON, self.onClose)
#----------------------------------------------------------------------
def onClose(*args):
""""""
args[0].Destroy()
#----------------------------------------------------------------------
if __name__ == "__main__":
app = wx.App(False)
frame = Example()
frame.Show()
app.MainLoop()
不建议这样做,因为在onClose事件处理程序中删除对self的引用不符合标准的Python习惯用法。当然,您还从方法中删除了事件,这违反了wxPython编码标准。但它确实有效!