【发布时间】:2010-12-22 00:01:58
【问题描述】:
使用 wxPython,当整个窗口进入/离开焦点时如何触发事件?
详细说明,我正在构建一个串行终端 GUI,并希望在用户没有选择我的应用程序时关闭连接,并在用户将我的应用程序带回前台时重新打开连接。我的应用程序只是一个从 wx.Frame 派生的窗口。
【问题讨论】:
使用 wxPython,当整个窗口进入/离开焦点时如何触发事件?
详细说明,我正在构建一个串行终端 GUI,并希望在用户没有选择我的应用程序时关闭连接,并在用户将我的应用程序带回前台时重新打开连接。我的应用程序只是一个从 wx.Frame 派生的窗口。
【问题讨论】:
这种情况的正确答案是使用绑定到框架的 EVT_ACTIVATE 处理程序。每当框架被激活(相对于当前打开的其他窗口进入前台)或停用时,都会有一个事件。您可以使用事件对象的 GetActive 方法来判断刚刚发生了什么。
【讨论】:
作为 WxPerl 程序员,我知道有
EVT_SET_FOCUS(
EVT_KILL_FOCUS(
如果您通过侦听帧作为第一个参数来初始化此事件,它应该像在 Perl 中一样工作,因为 API 几乎相同
【讨论】:
有趣的文章http://www.blog.pythonlibrary.org/2009/08/27/wxpython-learning-to-focus/
要点:wx.EVT_KILL_FOCUS 工作正常,但 wx.EVT_SET_FOCUS 对于任何包含小部件的面板都有点奇怪(孩子的 set-focus 会阻止面板的 set-focus 事件按预期触发?)
【讨论】:
除了这些家伙所说的之外,您可能还想尝试 EVT_ENTER_WINDOW 和 EVT_LEAVE_WINDOW。我认为当您将鼠标移入和移出框架小部件时会触发这些事件,尽管我不认为框架必须处于焦点才能触发这些事件。
@Hugh - 感谢您的阅读!
【讨论】: