【问题标题】:Getting a window to the top in wxPython for Mac在 Mac 的 wxPython 中获取顶部的窗口
【发布时间】:2012-06-09 16:37:30
【问题描述】:

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

它似乎在 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()

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

【问题讨论】:

  • 这与我用来展示我的应用程序的代码块完全相同,它适用于我在 mac 上,也许检查在你期望的时候调用的方法。其他窗口并不总是在顶部或浮动在父窗口上吗?
  • 没有其他的总是在最上面,其他的窗口可能是 Chrome 或终端,没关系。我会在父级上查看浮动,但这应该是主窗口...
  • 不,它是顶部窗口,没有父窗口。

标签: macos wxpython wxwidgets


【解决方案1】:

似乎原因是该应用程序是后台应用程序,因此需要一个激活事件。这可能不是最好的方法,但使用 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()])

【讨论】:

  • 感谢您的提示,它看起来很棒。我会试试这个。
猜你喜欢
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多