我必须打电话给';事件';在wxpython中的事件处理程序函数中?
我不确定我的问题是否清楚,所以我将进一步解释 情况如下:我必须打电话给';事件';在wxpython中的事件处理程序函数中?,python,event-handling,wxpython,Python,Event Handling,Wxpython,我不确定我的问题是否清楚,所以我将进一步解释 情况如下: class Frame(wx.Frame): def __init__(self, title): [...] self.Bind(wx.EVT_CLOSE, self.onclose) def onclose(self, event): """ Close the program """ self.Destroy() 所以
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”是无用的,我不想在那时调用它,但我一直无法这样做。是否有我不申请的“事件”的推荐用法?甚至可以不叫“事件”吗?我还没找到办法
谢谢 在这种情况下,不使用
事件
,但在其他情况下,事件
可用于了解函数onclose
是如何调用的;什么事件导致函数执行。如果事件是由鼠标单击引起的,则可以使用相同的功能使onClose
的行为与按钮单击不同
event
是必需的,因为来自wx
的任何绑定都将向被调用函数发送event
对象,因此当您无法使用def onclose(self)
来接受event
对象时。Bind
方法出于实际原因发送事件,因此,您可以应用其他方法,如event.getposition()
或event.getkey()
并在调用的方法中进行比较
顺便说一句,您可以随意调用它,将其命名为事件只是一种惯例。wxPython事件API要求它向事件处理程序发送事件。因此,当您进行绑定时,您将向事件处理程序发送某种类型的事件 以下是一些有助于您更好地理解wxPython的链接:
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编码标准。但它确实有效 现在,当您说“call
event
”时,您的意思是必须将其包含在处理程序的定义中吗?我的意思是我不能这样做,例如:def onclose(self):[…]当您定义onclose
(您的处理程序)时,event
必须在参数列表中。那么你到底在问什么?是的,事件在参数列表中。但是,它显然没有在函数中使用,因此它似乎是一个无用的参数。如果可能的话,我不想在我的函数中有无用的参数。是的,但是作为答案状态,当你绑定一个事件和一个函数时,该事件会被发送到该函数,所以函数需要期望它(即使你不使用它)好的。这似乎很奇怪,当它不被使用时,它不能被“不调用”。这是wx
定义它的方式,所以如果你自己做了一个函数:def add(self,x,y)
,你就不能将它称为add(1)
wx
强制任何绑定的函数接受事件
的方式与此add函数强制提供两个数字的方式相同。是的,但是wx是否可以在未提供“event”的情况下设置默认值?这是个好问题。可能还有其他原因我不知道,但从我的角度来看,最好让所有功能都需要它,因为wx
将始终提供它,并且用户可以根据自己的喜好忽略或不忽略它。我明白了,我只是觉得有一个我不会在特定函数中使用的参数很烦人。应用其他方法很酷,但在这个函数中,我并不在乎。