【问题标题】:wxPython event starts up at startupwxPython 事件在启动时启动
【发布时间】:2014-03-15 11:41:02
【问题描述】:

所以我是 python 的初学者,通常使用 C/C++ 或 Java 编写代码。在开发 GUI 的过程中,我的事件在程序开始运行时不断被调用,而不是在我单击按钮时被调用。 (我知道我的缩进是错误的,因为我需要将它放入代码块中)。如何让我的事件仅在我左键单击按钮时被调用?

def __init__(self, parent, title):
    super(QuadDash, self).__init__(parent, title=title, size=(1024, 780))            
    self.SetBackgroundColour("white")      
    pnl = wx.Panel(self)
    cbtn = wx.Button(pnl, label='Start Quad', pos=(20,30))
    self.Bind(wx.EVT_LEFT_DOWN, self.start_quad_event(), cbtn)        
    self.Show(True) 

def start_quad_event(self):
    dlg = wx.MessageDialog(self, "Test", "ABC", wx.YES_NO | wx.ICON_QUESTION)
    dlg.ShowModal()


if __name__ == '__main__':
    app = wx.App()
    qd = QuadDash(None, title='QuadCopter Dashboard')
    app.MainLoop()

【问题讨论】:

  • 尝试qd = QuadDash(None, title='QuadCopter Dashboard') 而不是仅仅QuadDash(...)。我不确定您创建的对象是否真的存在,或者它的引用计数是否变为零并且被垃圾回收。
  • @ChristianAichinger 对话框仍在启动时显示

标签: python user-interface wxpython


【解决方案1】:

违规行是:

self.Bind(wx.EVT_LEFT_DOWN, self.start_quad_event(), cbtn)

您实际上调用了start_quad_event() 并将结果传递给bind()

正确的行是:

self.Bind(wx.EVT_LEFT_DOWN, self.start_quad_event, cbtn)

注意:没有括号。在这里,您实际上将函数传递给bind()

【讨论】:

  • 所以它不会在启动时出现。我也将wx.EVT_LEFT_DOWN更改为wx.EVT_BUTTON,单击按钮TypeError: start_quad_event() takes exactly 1 argument (2 given) 时出现此错误@
  • 好的,我修好了我需要把我的start_quad_event(self)改成start_quad_event(self, event)
  • 使用def start_quad_event(self, evt):。 wx 将带有附加信息的事件对象传递给您的回调。
猜你喜欢
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 2018-06-27
  • 1970-01-01
相关资源
最近更新 更多