はじめに
前回は基本のwidgetについてのまとめでした。
今回はQDialog
クラスについてです。
内容
QDialogはユーザーからのリスポンスを得る為に主に使用され、最上位画面に出てきます。
PyQt APIにはInputDialog
、FileDialog
、FontDialog
などの多くの拡張済みのダイアログウィジェットが用意されているようです。
以下の例では,WindowModality
属性がモーダルかモードレスカアを決定します。(※モーダレスだとダイアログが閉じるまで,元のウィンドウに切り替わらなくなるそうです。)
ユーザーがEscapeキーを押すとQDialog.reject()
メソッドによってダイアログが破棄されるそうです。
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
def window():
app = QApplication(sys.argv)
w = QWidget()
btn = QPushButton(w)
btn.setText("Hello World!")
btn.move(100,50)
btn.clicked.connect(showdialog)
w.setWindowTitle("PyQt Dialog demo")
w.show()
sys.exit(app.exec_())
def showdialog():
dlg = QDialog()
b1 = QPushButton("ok",dlg)
b1.move(50,50)
dlg.setWindowTitle("Dialog")
dlg.setWindowModality(Qt.ApplicationModal)
dlg.exec_()
if __name__ == '__main__':
window()
実行すると以下のようなwindowが表示されます。
そしてボタンを押すとダイアログwindowが表示されます。
さいごに
ダイアログにも色々な種類のものが用意されており、またモーダル/モードレスなどの設定も可能だと言うことが分かりました。
良く使うGUIでのダイアログの作り方の基本がわかりしました。
ただダイアログから親へのシグナルの受け渡しやデータ共有の方法等気になるところですね。普通にsignal/slotやglobal変数等でできるのでしょうか??
今後こういった部分にも注目していきたいと思います。
参考