【问题标题】:WX: main window lost focus eventWX:主窗口失去焦点事件
【发布时间】:2021-08-22 08:24:49
【问题描述】:

我正在尝试解决这个基本用例:我在wxpython 中有一个主应用程序窗口,并且想要在主窗口失去焦点时触发一个操作(在这种情况下,关闭应用程序)(即当我在外面单击,窗口变为非活动状态。

我试过EVT_KILL_FOCUS,但它似乎不适用于主窗口。

现在我有这个代码:

import wx

def main():
    app = wx.App()
    window = wx.Frame(None, title="Title", size=(800,600))
    window.SetBackgroundColour(wx.NullColour)
    window.Centre()

    def on_activate_evt(evt):
        if not evt.Active:
            window.Close()

    app.Bind(wx.EVT_ACTIVATE, on_activate_evt)

    window.Show(True)
    app.MainLoop()

这可行,但会产生一个问题:当我单击窗口的顶部栏时,EVT_ACTIVE 被触发,状态为 evt.Active=False,好像窗口装饰不被视为主窗口的一部分。

有没有办法修复它(或其他方式来实现所需的行为)?

【问题讨论】:

  • style=wx.BORDER_NONE添加到Frame中,那么就没有top bar可以点击了。

标签: python-3.x wxpython wxwidgets


【解决方案1】:

如果您创建一些实际上可以在框架内获得焦点的控件,例如一个wxTextCtrl,你就可以抓住wxEVT_KILL_FOCUS

但我不得不说,每当您切换离开它时,一个窗口就会消失,这看起来像是一个非常奇怪的 UI 决定。也许您想改用wxPopupWindow 之类的东西?

【讨论】:

    猜你喜欢
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 2011-03-07
    • 2023-03-19
    相关资源
    最近更新 更多