2012-08-25 4 views
14

アプリケーションが別のマシンから指定されたメッセージを受け取ったときに、PyQT4ウィンドウ(QtGui.QMainWindow)を正面にジャンプさせたいです。 通常、ウィンドウは最小化されます。PyQT4ウィンドウを前面にジャンプさせる方法は?

私はraise_()show()メソッドを試しましたが、動作しません。

答えて

13

これは動作します:どちらがWin7の上で私のために必要とされる

# this will remove minimized status 
# and restore window with keeping maximized/normal state 
window.setWindowState(window.windowState() & ~QtCore.Qt.WindowMinimized | QtCore.Qt.WindowActive) 

# this will activate the window 
window.activateWindow() 

setWindowStateは、最小化されたウィンドウを復元し、フォーカスを与えます。しかし、ウィンドウがフォーカスを失って最小化されなかった場合は、フォーカスが得られません。

activateWindowは、フォーカスを与えますが、最小化状態を復元しません。

両方を使用すると、効果があります。

+1

ありがとう。それは動作します。 – redice

+0

私はターミナルから私のウィンドウを実行している場合、これは私のために働いていない! –

+0

Ubuntu Unityの下でうまく動作しました! –

3

私は上記の方法で運がなかったので、Cバージョンhereのハックを使用してwin32 apiを直接使用する必要がありました。これは私のために働いた:

from win32gui import SetWindowPos 
import win32con 

SetWindowPos(window.winId(), 
      win32con.HWND_TOPMOST, # = always on top. only reliable way to bring it to the front on windows 
      0, 0, 0, 0, 
      win32con.SWP_NOMOVE | win32con.SWP_NOSIZE | win32con.SWP_SHOWWINDOW) 
SetWindowPos(window.winId(), 
      win32con.HWND_NOTOPMOST, # disable the always on top, but leave window at its top position 
      0, 0, 0, 0, 
      win32con.SWP_NOMOVE | win32con.SWP_NOSIZE | win32con.SWP_SHOWWINDOW) 
window.raise_() 
window.show() 
window.activateWindow() 
関連する問題