我必须打电话给';事件';在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的链接:

由于您不想遵循工具包的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编码标准。但它确实有效

现在,当您说“call
event
”时,您的意思是必须将其包含在处理程序的定义中吗?我的意思是我不能这样做,例如:def onclose(self):[…]当您定义
onclose
(您的处理程序)时,
event
必须在参数列表中。那么你到底在问什么?是的,事件在参数列表中。但是,它显然没有在函数中使用,因此它似乎是一个无用的参数。如果可能的话,我不想在我的函数中有无用的参数。是的,但是作为答案状态,当你
绑定一个事件和一个函数时,该事件会被发送到该函数,所以函数需要期望它(即使你不使用它)好的。这似乎很奇怪,当它不被使用时,它不能被“不调用”。这是
wx
定义它的方式,所以如果你自己做了一个函数:
def add(self,x,y)
,你就不能将它称为
add(1)
wx
强制任何绑定的函数接受
事件
的方式与此add函数强制提供两个数字的方式相同。是的,但是wx是否可以在未提供“event”的情况下设置默认值?这是个好问题。可能还有其他原因我不知道,但从我的角度来看,最好让所有功能都需要它,因为
wx
将始终提供它,并且用户可以根据自己的喜好忽略或不忽略它。我明白了,我只是觉得有一个我不会在特定函数中使用的参数很烦人。应用其他方法很酷,但在这个函数中,我并不在乎。