在 wxPython for Mac 中获取一个顶部窗口



我有一个位于托盘中的应用程序,当您单击托盘菜单中的某个菜单项时,我正在尝试让它显示/隐藏。代码几乎有效,但窗口显示在其他窗口后面,而不是像它应该的那样显示在顶部。(注意,我不希望它总是在顶部,只是弹出到窗口堆栈的顶部。

似乎在Windows上运行得很好,但在Mac上,它同时保持在它前面拉动的任何其他窗口之下。

相关代码如下。

def on_hide_frame(self, event):
    self.frame.on_iconify(event)
def on_restore_frame(self, event):
    if self.frame.IsIconized():
        self.frame.Iconize(False)
    if not self.frame.IsShown():
        self.frame.Show(True)
    self.frame.Raise()

另请注意,当调用 this 时,self.frameapp.GetTopWindow() 是同一对象,并且将两者互换并不能修复错误。

似乎原因是该应用程序是后台应用程序,因此需要一个激活事件。这可能不是最好的方法,但使用 Applescript 向自己发送激活事件相当容易:

subprocess.Popen(['osascript', '-e', '''
    tell application "System Events"
      set procName to name of first process whose unix id is %s
    end tell
    tell application procName to activate
''' % os.getpid()])

最新更新