我不确定我的问题是否清楚,所以我将再解释一下。
情况如下:
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'是无用的,我不想再这样做,但是我无法这样做。是否有推荐使用'事件'我不申请?甚至可以不叫'事件'吗?我还没找到办法。
谢谢!
答案 0 :(得分:1)
在这种情况下,不使用event
,但在其他情况下,event
可用于了解函数onclose
的调用方式;什么事件导致函数执行。如果您的活动是由鼠标点击引起的,那么您可以使onClose
的行为与按钮点击的方式不同,使用相同的功能。
event
是必需的,因为来自wx
的任何绑定都会向被调用函数发送event
对象,因此当您无法使用def onclose(self)
接受event
时对象。
答案 1 :(得分:0)
Bind
方法出于实际原因发送事件,因此您可以应用其他方法,例如event。getposition()
或event。getkey()
,并在调用的方法中对其进行比较。
你可以把它叫做任何你喜欢的东西,命名它只是传统的事件。
答案 2 :(得分:0)
wxPython事件API要求它将事件发送到事件处理程序。因此,当您执行Bind时,您将向事件处理程序发送某种类型的事件。
以下是一些可以帮助您更好地理解wxPython的链接:
由于您不想遵循工具包的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编码标准的方法中删除事件。但它确实有效!