我必须在 wxpython 中的事件处理程序函数中调用'event'吗?



我不确定我的问题是否清楚,所以我将再解释一点。

情况如下:

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编码标准。但它确实有效!

相关内容

  • 没有找到相关文章

最新更新