保持窗口始终在底部

时间:2014-02-23 15:01:51

标签: wxpython

我今天开始研究wxPython,我想知道是否有wx.STAY_ON_TOP的替代品。我正在寻找的是一个永远在底的窗口。不幸的是,没有wx.STAY_ON_BOTTOM窗口样式。

基本上我希望其他窗户(我不拥有)即使在有焦点的情况下也总是在我的上面。 (想想桌面上的小部件)。

我尝试在那个窗口上使用Lower()无效。

有什么建议吗?

1 个答案:

答案 0 :(得分:-1)

根据this article,我希望您绑定的wx.EVT_SET_FOCUSwx.EVT_KILL_FOCUS事件不会在包含自己接受焦点的小部件的面板或框架上触发。

This answer建议在窗口进入前台或发送到后台时使用帧上的wx.EVT_ACTIVATE事件进行捕获。使用event对象可以确定窗口当前是否为前景窗口。

以下是一个空框架,它将留在所有其他窗口后面:

import wx


class MyFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        super(MyFrame, self).__init__(*args, **kwargs)
        self.Bind(wx.EVT_ACTIVATE, self.on_focus)

    def on_focus(self, evt):
        self.Lower()


if __name__ == '__main__':
    app = wx.App(False)
    main_window = MyFrame(None)
    main_window.Show()
    app.MainLoop()

但是,当单击窗口的标题栏或在窗口以这种方式获得焦点后单击窗口内的任何内容时,似乎不会触发wx.EVT_ACTIVATE事件。因此,如果您单击标题栏(而不是单击并拖动),您可以使窗口位于顶部并保持这种状态,直到窗口失去焦点。这与你要求的完全不符,但我认为它更像是一个功能,而不是一个bug。