PyQt5 QMainwindowとQDialogの表示

Share on:

PyQt5でメインウィンドウからダイアログを表示して、ダイアログから値を受け取るサンプルを作ってみました。

pyqt5-mainwindow-and-dialog-01

メインウィンドウ

QMainWindowにメニューとテキストブラウザを設置 メニューはSettingのみ

pyqt5-mainwindow-and-dialog-02

ダイアログ

ダイアログボタンボックス付きのQDialogにテキストエディットを設置

pyqt5-mainwindow-and-dialog-03

値の受け渡し

1def plane_text(self):
2    result = self.exec()
3    plane_text = self.ui.textEdit.toPlainText()
4    return (plane_text, result == QtWidgets.QDialog.Accepted)

ダイアログを表示して、実行結果とテキストエディットのテキストを返す処理としています。self.exec()はAcceptedかRejectedが返ってくるのでresult == QtWidgets.QDialog.AcceptedとしてTrueかFalseが返るようにしています。

1plane_text, result = SettingDialog(self).plane_text()

上記のようにダイアログを表示して値を取得します。

ソースコード

ソースコードはgithubにあります

main.py

 1import sys
 2from mainwindow import Ui_MainWindow
 3from setting_dialog import Ui_Dialog
 4from PyQt5 import QtWidgets, QtCore
 5
 6class SettingDialog(QtWidgets.QDialog):
 7    def __init__(self, parent):
 8        super().__init__(parent)
 9        
10        self.ui = Ui_Dialog()
11        self.ui.setupUi(self)
12
13    def plane_text(self):
14        result = self.exec()
15        plane_text = self.ui.textEdit.toPlainText()
16        return (plane_text, result == QtWidgets.QDialog.Accepted)
17
18class MainWindow(QtWidgets.QMainWindow):
19    def __init__(self, app):
20        super().__init__()
21        
22        self.ui = Ui_MainWindow()
23        self.ui.setupUi(self)
24        self.ui.actionSetting.triggered.connect(self.show_setting_dialog)
25
26    def show_setting_dialog(self):
27        plane_text, result = SettingDialog(self).plane_text()
28        if result:
29            self.ui.textBrowser.setPlainText(plane_text)
30 
31def main():
32    app = QtWidgets.QApplication(sys.argv)
33    window = MainWindow(app)
34    window.show()
35    app.exec_()
36 
37if __name__ == '__main__':
38    main()

関連記事