大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

ラズパイデスクトップでPyQt5入門(10)Dialog in PyQt5(1)

著者:國松亜紗子
公開日:2019/11/21
最終更新日:2019/11/21
カテゴリー:技術情報

こんばんは。國松です。すっかり寒くなりました。体調の管理にはお気を付けください。
今回はPtQt5のDialogを見て行きます。

参考サイト
ZetCode PyQt5 tutorial
【PythonでGUI】PyQt5 -始めの一歩-

Dialog in PyQt5
ダイアログはダイアログボックス、ダイアログウィンドウの事でGUIアプリケーションには必須の部品です。ダイアログは、データの入力、データの変更、アプリケーション設定の変更などに使用されます。
ダイアログとは 「分かりそう」で「分からない」でも分かった気になれるIT用語辞典

1.QInputDialog
QInputDialogはユーザーからの単一の値を取得するためのシンプルなダイアログを提供します。入力値は文字列、数値、またはリストのアイテムです。

#!/usr/bin/python3
#-*- coding: utf-8 -*-

"""
In this example, we receive data from
a QIputDialog dialog
"""

from PyQt5.QtWidgets import(QWidget, QPushButton, QLineEdit,
    QInputDialog, QApplication)
import sys

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.btn = QPushButton('Dialog', self)
        self.btn.move(20,20)
        self.btn.clicked.connect(self.showDialog)

        self.le = QLineEdit(self)
        self.le.move(130,22)

        self.setGeometry(300,300,290,150)
        self.setWindowTitle('Input dialog')
        self.show()

    def showDialog(self):
        #ダイアログの表示
        text, ok = QInputDialog.getText(self, 'Input Dialog',
            'Enter your name:')
        
        #入力されたテキストleオブジェクトへセット=表示
        if ok:
            self.le.setText(str(text))

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

今回はダイアログボタンと行編集ウィジェットのシンプルなものを作成します。ボタンを押すと入力ダイアログが表示されます。
入力ダイアログにテキストを入力してOKを押すと行編集ウィジェットに入力したテキストが表示されます。

text, ok = QInputDialog.getText(self, 'Input Dialog',
    'Enter your name:')

この行は入力ダイアログを表示します。最初の文字列はダイアログのタイトル。2番目の文字列はダイアログ内のメッセージです。
ダイアログは入力されたテキストと文字列を返します。Okボタンが押されるとブール値はtrueになります。

if ok:
   self.le.setText(str(text))

ダイアログから受け取ったテキストはsetText()を使用して行編集ウィジェットに設定されます。

2.QColorDialog
QColorDialogは色を選択するためのダイアログウィジェットを提供します。

#!/usr/bin/python3
#-*- coding: utf-8 -*-

"""
In this exanple, we select a color value
from the QColorDialog and change the background
color of a QFrame widget
"""

from PyQt5.QtWidgets import( QWidget,QPushButton, QFrame,
    QColorDialog, QApplication)
from PyQt5.QtGui import QColor
import sys

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        #背景色の初期値を設定(今回は黒)
        col = QColor(0,0,0)

        self.btn = QPushButton('Dialog', self)
        self.btn.move(20,20)

        self.btn.clicked.connect(self.showDialog)

        self.frm = QFrame(self)
        self.frm.setStyleSheet("QWidget { background-color: %s }"
            % col.name())
        self.frm.setGeometry(130,22,100,100)

        self.setGeometry(300,300,250,180)
        self.setWindowTitle('Color dialog')
        self.show()

    def showDialog(self):
        #カラー選択ダイアログの表示
        col = QColorDialog.getColor()

        #選択された色を背景色に表示
        if col.isValid():
            self.frm.setStyleSheet("QWidget { background-color: %s }"
                % col.name())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


プッシュボタンとQFrameを使用していきます。ウィジェットの背景は黒に設定されています。QColorDialogで背景の色を変更できます。

if col.isValid():
    self.frm.setStyleSheet("QWidget { background-color: %s }"
        % col.name())

色が有効かどうかを確認します。キャンセルボタンをクリックすると有効な色は返却されません。色が有効な場合はスタイルシートを使用して背景色を変更します。
今回はここまでにします。それではまた。

 

    上に戻る