アプリケーションが別のマシンから指定されたメッセージを受け取ったときに、PyQT4ウィンドウ(QtGui.QMainWindow
)を正面にジャンプさせたいです。 通常、ウィンドウは最小化されます。PyQT4ウィンドウを前面にジャンプさせる方法は?
私はraise_()
とshow()
メソッドを試しましたが、動作しません。
アプリケーションが別のマシンから指定されたメッセージを受け取ったときに、PyQT4ウィンドウ(QtGui.QMainWindow
)を正面にジャンプさせたいです。 通常、ウィンドウは最小化されます。PyQT4ウィンドウを前面にジャンプさせる方法は?
私はraise_()
とshow()
メソッドを試しましたが、動作しません。
これは動作します:どちらが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
は、フォーカスを与えますが、最小化状態を復元しません。
両方を使用すると、効果があります。
私は上記の方法で運がなかったので、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()
ありがとう。それは動作します。 – redice
私はターミナルから私のウィンドウを実行している場合、これは私のために働いていない! –
Ubuntu Unityの下でうまく動作しました! –