2011-01-31 11 views
3

私は主なウィンドウが常に他のアプリケーションの上にとどまることをユーザーが決めるアプリケーションを作りたいと思っています。PyQt4: "Stay On Top"の動作を切り替えるにはどうしたらいいですか?

PyQt4では、常に上にとどまるウィンドウを作成するのは簡単です。これはここでカバーされています:PyQt: Always on top

私はこの動作をオンまたはオフに切り替えるウィジェット(メニュー項目、チェックボックスなど)を持ちたいと思います。これまでのところ、元の動作をリセットする方法が見つかりませんでした。

はイスマイル「カートマン」Dönmezの提案した後、あなたに

UPDATE に感謝し、私はもう少しを検索し、私はPyQt4でWindowFlags例の実装を発見しました。

それはWindow Flags Exampleを参照してください、あなたはQt::WindowStaysOnTopHintヒントが欲しいhere

答えて

13

これは、それを無効にする必要があります。

window.setWindowFlags(window.windowFlags() & ~QtCore.Qt.WindowStaysOnTopHint) 

これは、それを有効にする必要があります

window.setWindowFlags(window.windowFlags() | QtCore.Qt.WindowStaysOnTopHint) 
+0

あなたの答えをありがとう – pmav99

+2

保存するために 'windowFlags()'を呼び出すべきであることがわかりました。 'Qt.WindowFlags'型です。私がXORを使用して、最初からフラグ(私の場合は 'Qt.Dialog^Qt.WindowContextHelpButtonHint')を作成しようとすると、' Qt.WindowFlags'の代わりに 'int'で終わるので' TypeError'を取得します。 – mlt

+0

これは受け入れられる回答である必要があります。これを無効/有効にする方法を示します – swdev

4

を見つけることができます。

+0

ありがとうございます。実際にPyQtバージョンのサンプルはここにあります:http://blindvic.livejournal.com/9437.html – pmav99

4

ロッシュが正しいです。しかし、フラグを変更した後にwindow.show()をインクルードすることを忘れないでください。フラグが変更されるとウィンドウが非表示になります。私はフラグをトグルするためのコードも含んでいます。

これは、それをクリアします:

window.setWindowFlags(window.windowFlags()&〜QtCore.Qt.WindowStaysOnTopHint)

をこれがそれを可能にします:

window.setWindowFlags(window.windowFlagsを()| QtCore.Qt.WindowStaysOnTopHint)

これはそれを切り替えることができます:

window.setWindowFlag S(window.windowFlags()^ QtCore.Qt.WindowStaysOnTopHint)

0

私はRosh's answerにコメントすることはできないんだけど、そうここに注目 - PyQtは5.7のためDevuanに、あなたはQDialogにWindowStaysOnTopHintフラグを切り替えた場合、それがされた後、表示されると、ウィンドウが消え、すぐに再度表示する必要があります。これ以外は動作します。