2016-11-29 5 views
0

python 3.4、pyQt5、Qt designer(Winpythonディストリビューション)を使用します。私はデザイナーによってguisを作って、setupUiでPythonでそれらをインポートするというアイデアが気に入っています。私はMainWindowsとQDialogsを表示することができます。しかし、今はMainWindowを常に上にして閉じるボタンでのみ設定したいと思います。私はこれがWindowsのフラグを設定することによって行うことができます知っている。私は次のようにしてみました:pyQt5 change MainWindow Flags

from PyQt5 import QtCore, QtGui, QtWidgets 
import sys 
class MainWindow(QtWidgets.QMainWindow,Ui_MainWindow): 
    def __init__(self, parent=None): 
     super(MainWindow, self).__init__(parent) 
     self.setupUi(self) 
     self.setWindowFlags(QtCore.Qt.WindowCloseButtonHint | QtCore.Qt.WindowMinimizeButtonHint) 
     self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) 
if __name__ == '__main__': 
    app = QtWidgets.QApplication(sys.argv) 
    form = MainWindow() 
    form.show() 
    sys.exit(app.exec_()) 

MainWindowは表示されますが(エラーなし)、フラグは適用されません。これは、Windowsのプロパティを既に作成した後に変更するよう依頼したためです。さて、質問は、私はUi_MainWindowを直接変更せずにどうしたらいいのですか? Qtデザイナーでフラグを変更することは可能ですか?ありがとう

答えて

1

毎回setWindowFlagsのコールは現在の設定を完全に上書きするため、すべてのフラグを一度に設定する必要があります。また、CustomizeWindowHintフラグを含める必要があります。そうしないと、他のすべてのヒントは無視されます。 Windowsではおそらく次のようになります。

self.setWindowFlags(
     QtCore.Qt.Window | 
     QtCore.Qt.CustomizeWindowHint | 
     QtCore.Qt.WindowTitleHint | 
     QtCore.Qt.WindowCloseButtonHint | 
     QtCore.Qt.WindowStaysOnTopHint 
     ) 

ただし、これはすべてのプラットフォームで動作する可能性は非常に低いです。 「ヒント」は、まさにそれを意味します。ウィンドウマネージャーはこれらのフラグを完全に自由に無視することができ、同じようにすべての動作を保証するものではありません。

PS:

Qtデザイナーでウィンドウフラグを設定することはできません。

+0

パーフェクト。それは、良い説明も動作します。どうもありがとう。 – polgia0