【问题标题】:How does wxpython exit Mainloop?wxpython如何退出Mainloop?
【发布时间】:2013-12-18 13:36:09
【问题描述】:

我有一个 wxpython 应用程序,它是这样运行的:

if __name__ == "__main__":
    app = wx.App(False)
    frame = MainWindow("Application")
    frame.Show()
    app.MainLoop()

应用程序的菜单栏上有一个“退出”菜单项,它绑定:

def onExit(self, event):
    """"""
    self.Close()
  • 点击“退出”时,究竟发生了什么?
  • 当点击“退出”时,app.MainLoop() 会发生什么?
  • 单击框架窗口右上角的“X”按钮与 点击“退出”按钮?
  • 为什么当我单击“X”按钮时 python.exe*32 进程没有结束,并且 单击“X”按钮时如何杀死python.exe * 32进程结束?
  • 如果我运行脚本,为什么当我单击“退出”时它不打印 "ok" 这样:

    if __name__ == "__main__":
        app = wx.App(False)
        frame = MainWindow("Application")
        frame.Show()
        app.MainLoop()
        print "ok"
    

【问题讨论】:

  • 考虑到您问题中的最后几个要点:您的应用程序是否有托盘图标?我记得前段时间遇到过类似的问题。类似于您的代码适用于 Windows 7、Python 2.7、wxPython 2.8。

标签: python wxpython


【解决方案1】:
  1. 当点击“退出”时,究竟发生了什么?

    'exit' 有一个事件绑定来调用 onExit 方法,该方法调用此 MainWindow 实例的 close 方法。这会调用 EVT_CLOSE 事件,您可以选择绑定到此事件并控制发生的情况,如果您不绑定,它会调用 Destroy 方法来安全地销毁窗口。

  2. 当点击“退出”时,app.MainLoop()会发生什么?

    主循环将继续处理事件,除非它的最后一个顶级窗口关闭,当这种情况发生时主循环结束。

  3. 点击框架窗口右上角的“X”按钮和点击“退出”按钮一样吗?

    它的种类与它生成一个 EVT_CLOSE 事件相同,该事件与上面的 onExit 绑定。​​

  4. 为什么点击“X”按钮python.exe*32进程不结束,点击“X”按钮如何杀死python.exe*32进程?

    它应该在所有顶级窗口都关闭时结束,您必须仍然存在一个顶级窗口。

  5. 如果我以这种方式运行脚本,为什么当我点击“退出”时它不会打印“ok”

    通常在没有顶层窗口时会这样。

【讨论】:

  • OP所说的“退出”是一个菜单项。菜单项绑定到 EVT_MENU,而不是 EVT_CLOSE。
  • 对不起,我没有在任何地方直接提到EVT_MENU,我提到exit有一个绑定到onExit方法的事件(即事件EVT_MENU),然后它声明onExit方法调用EVT_CLOSE事件(当调用 Close 方法时)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-25
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多