3

トレイにあるアプリがあり、トレイメニューの特定のメニュー項目をクリックすると表示/非表示になるようにしようとしています。コードはほとんど機能しますが、ウィンドウが他のウィンドウの背後に表示されます。(注意してください、ウィンドウスタックの一番上にポップするためだけに、常に一番上にしたくありません。)

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.frameまた、これが呼び出されたときは と同じオブジェクトでapp.GetTopWindow()あり、2 つを交換してもバグは修正されないことに注意してください。

4

1 に答える 1

4

アプリがバックグラウンド アプリであるため、アクティブ化イベントが必要であることが原因のようです。最善の方法ではないかもしれませんが、Applescript を使用して activate イベントを自分自身に送信するのはかなり簡単です。

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()])
于 2012-06-06T21:43:05.153 に答える