优雅终止wxPython应用程序
我正在开发一个使用wxPython的应用程序,这个程序有多个窗口,并且需要通过串口连接。现在我需要在退出应用程序时,能够干净利落地关闭串口连接。
请问,最好的方法是什么呢?是不是应该通过wxApp的子类来处理这个问题?
谢谢,
Josh
2 个回答
0
我通常会在关闭窗口之前,先用关闭按钮的事件处理器来关闭连接等操作。如果你想捕捉到右上角的“x”按钮,那么你需要绑定到EVT_CLOSE这个事件。不过,注意了,当你这么做的时候,你需要调用窗口的Destroy()方法,而不是Close()方法,否则你会陷入一个无限循环中。
1
我不太确定你具体遇到了什么问题,但我猜这可能是关于程序组织或设计的问题。
虽然可能有我不太了解的更好方法,但我会尝试这样做:创建一个“父”对象(不需要特定类型),它可以保存多个窗口的引用。当其中一个窗口接收到菜单或其他地方的退出事件时,它会调用 self.parent.broadcast_quit(),这样就会向它所持有的每个窗口发送一个退出事件。
这种做法有点像把视图和控制器分开,窗口是视图的一部分,而父对象就像是一个告诉我什么时候要关闭的控制器——父对象可以很好地管理连接的结束,因为它可以随时知道哪些窗口已经关闭以及关闭的时间。你可以在窗口内部处理视图的关闭细节,然后在关闭时向控制器发送一个“我完成了”的消息,这样就可以在父对象那边触发一些最终的关闭操作。
可以查看 wx.PostEvent 和 自定义事件类 的文档。(事件是一种很好的方式,可以在 非阻塞的图形界面 中表达跨窗口的消息。)