QMainWindowが最小化されたときにモーダルQDialogを最小化する(PyQt 5を使用)

poetofzwan

私が使用しているサンプルコード:

import sys
from PyQt5 import QtCore
from PyQt5 import QtWidgets

class MainWindow(QtWidgets.QMainWindow):

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.open_about = False
        self.openAction = QtWidgets.QAction('About', self)
        self.openAction.triggered.connect(self.aboutDialog)
        menuBar = self.menuBar()
        fileMenu = menuBar.addMenu('&File')
        fileMenu.addAction(self.openAction)
        self.calendar = QtWidgets.QCalendarWidget(self)
        self.setCentralWidget(self.calendar)

    def about_state_upd(self, value):
        self.open_about = value

    def aboutDialog(self):
        self._about = AboutDialog(self)
        self._about.exec_()

    def hideEvent(self, hideEvent):
        if self.open_about == True:
            self._about.setVisible(False)

    def showEvent(self, showEvent):
        if self.open_about == True:
            if self._about.isHidden() == True:
                self._about.setModal(True)
                self._about.setVisible(True)

class AboutDialog(QtWidgets.QDialog):

    def __init__(self, parent):
        super(AboutDialog, self).__init__(parent)

        self.setMinimumSize(400, 350)
        self.parent().about_state_upd(True)

    def closeEvent(self, closeEvent):
        self.parent().about_state_upd(False)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    app_window = MainWindow()
    app_window.showMaximized()
    sys.exit(app.exec_())

このコードは基本的には機能しますが、非常に複雑に見えます。モーダルQDialogが開いているときに、QMainWindowが最小化されると、QDialogも最小化されるようにする(そしてQMainWindowが復元されると逆になる)ようにするためのより簡単でクリーンな方法はありますか?

コードはKDENeon(Kubuntuベースのディストリビューション)で実行されています。

poetofzwan

PyQtメーリングリストの人々のおかげで、私はなんとかKDEの回避策を得ることができました。exec_()を使用する代わりに、show()を使用しています。次に、QMainWindowでsetDisabled()を使用して、ダイアログをモーダルに動作させます。興味のある人のための(非常に迅速で基本的な)例を次に示します。

import sys
from PyQt5 import QtCore
from PyQt5 import QtWidgets

class MainWindow(QtWidgets.QMainWindow):

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.openAction = QtWidgets.QAction('About', self)
        self.openAction.triggered.connect(self.aboutDialog)
        menuBar = self.menuBar()
        fileMenu = menuBar.addMenu('&File')
        fileMenu.addAction(self.openAction)
        self.calendar = QtWidgets.QCalendarWidget(self)
        self.setCentralWidget(self.calendar)

    def aboutDialog(self):
        self._about = AboutDialog(self)
        self.setDisabled (True)
        self._about.show()

    def enableWidgets(self):
        self.setDisabled(False)

class AboutDialog(QtWidgets.QDialog):

    def __init__(self, parent):
        super(AboutDialog, self).__init__(parent)

        self.setMinimumSize(400, 350)

    def closeEvent(self, parent):
        self.parent().enableWidgets()

    def changeEvent(self, event):
        if event.type() == QtCore.QEvent.WindowStateChange:
            if self.windowState() & QtCore.Qt.WindowMinimized:
                self.parent().showMinimized()
            else:
                self.parent().showMaximized()

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    app_window = MainWindow()
    app_window.showMaximized()
    sys.exit(app.exec_())

PyQtメーリングリストの投稿へのリンク

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

モーダルウィンドウが最小化されたときにすべてのアプリケーションウィンドウを最小化する(Linuxの場合)

分類Dev

フォームが最小化されたときにチェックボックスを非表示にする

分類Dev

DMアプリウィンドウが最小化されているときに、遅延タスクによって投稿されたモーダルダイアログを処理するにはどうすればよいですか?

分類Dev

最小化されたモーダルフォームを復元する方法は?

分類Dev

ツールバーの戻るボタンを押すと、通知から開いたときにアプリが最小化されます

分類Dev

最小化されたときにバーコードスキャンをキャプチャする

分類Dev

最小化されたJavaScriptのソースを編集する

分類Dev

アプリが最小化されたことを検出する(iOS)

分類Dev

モデルがテンソルフローを評価するときの最小化を避ける

分類Dev

フォームが最小化されたときにフォームを非表示にするにはどうすればよいですか?

分類Dev

アプリが最小化されて再開されたときにネットワーク通話エラーを処理する方法-WindowsPhone 8

分類Dev

ページが最小化されたときにボタンを整理するにはどうすればよいですか?

分類Dev

Joptionpaneを最小化またはうんちするときにJavagraphics2Dコンポーネントが消去されないようにする方法は?

分類Dev

コルドバ(Android)。アプリケーションが最小化されているときにオーディオ再生を無効にする

分類Dev

ブラウザが最小化されたときにWindowsタスクバーを開く

分類Dev

子が最小化されたときに親フォームにメッセージボックスを表示する

分類Dev

ウィンドウが最小化されたときにキーボード入力を取得するpygameの方法はありますか?

分類Dev

QMdiSubWindowを最小化すると、QMdiSubWindowセグメンテーションフォールトにネストされたFigureCanvasQTAggが発生します

分類Dev

Kivyウィンドウが最小化されていないときに関数を実行する方法

分類Dev

Androidアプリケーションが最小化されたことを検出する方法は?

分類Dev

最小化されたファイルに「min」で名前を付ける必要がありますか?

分類Dev

常に最小化された特定のコマンドラインツールを起動する

分類Dev

18.04 で最大最小化モーダル ウィンドウを許可する

分類Dev

最小化されたAndroid通知を開始する方法

分類Dev

gnomeで最小化されたxtermを開始する方法

分類Dev

アプリが最小化されたときにrxjavaの繰り返しを停止するにはどうすればよいですか

分類Dev

C#モノゲーム-ゲームウィンドウが最小化されている間にゲームループを停止する方法

分類Dev

起動時に最小化されたThunderbirdを起動する方法は?

分類Dev

OSXで最小化されたウィンドウを前面に表示する方法

Related 関連記事

  1. 1

    モーダルウィンドウが最小化されたときにすべてのアプリケーションウィンドウを最小化する(Linuxの場合)

  2. 2

    フォームが最小化されたときにチェックボックスを非表示にする

  3. 3

    DMアプリウィンドウが最小化されているときに、遅延タスクによって投稿されたモーダルダイアログを処理するにはどうすればよいですか?

  4. 4

    最小化されたモーダルフォームを復元する方法は?

  5. 5

    ツールバーの戻るボタンを押すと、通知から開いたときにアプリが最小化されます

  6. 6

    最小化されたときにバーコードスキャンをキャプチャする

  7. 7

    最小化されたJavaScriptのソースを編集する

  8. 8

    アプリが最小化されたことを検出する(iOS)

  9. 9

    モデルがテンソルフローを評価するときの最小化を避ける

  10. 10

    フォームが最小化されたときにフォームを非表示にするにはどうすればよいですか?

  11. 11

    アプリが最小化されて再開されたときにネットワーク通話エラーを処理する方法-WindowsPhone 8

  12. 12

    ページが最小化されたときにボタンを整理するにはどうすればよいですか?

  13. 13

    Joptionpaneを最小化またはうんちするときにJavagraphics2Dコンポーネントが消去されないようにする方法は?

  14. 14

    コルドバ(Android)。アプリケーションが最小化されているときにオーディオ再生を無効にする

  15. 15

    ブラウザが最小化されたときにWindowsタスクバーを開く

  16. 16

    子が最小化されたときに親フォームにメッセージボックスを表示する

  17. 17

    ウィンドウが最小化されたときにキーボード入力を取得するpygameの方法はありますか?

  18. 18

    QMdiSubWindowを最小化すると、QMdiSubWindowセグメンテーションフォールトにネストされたFigureCanvasQTAggが発生します

  19. 19

    Kivyウィンドウが最小化されていないときに関数を実行する方法

  20. 20

    Androidアプリケーションが最小化されたことを検出する方法は?

  21. 21

    最小化されたファイルに「min」で名前を付ける必要がありますか?

  22. 22

    常に最小化された特定のコマンドラインツールを起動する

  23. 23

    18.04 で最大最小化モーダル ウィンドウを許可する

  24. 24

    最小化されたAndroid通知を開始する方法

  25. 25

    gnomeで最小化されたxtermを開始する方法

  26. 26

    アプリが最小化されたときにrxjavaの繰り返しを停止するにはどうすればよいですか

  27. 27

    C#モノゲーム-ゲームウィンドウが最小化されている間にゲームループを停止する方法

  28. 28

    起動時に最小化されたThunderbirdを起動する方法は?

  29. 29

    OSXで最小化されたウィンドウを前面に表示する方法

ホットタグ

アーカイブ