PyQt

【PyQt】画面開発で使えるQtWidgetsを紹介

【PyQt】画面開発で使えるQtWidgetsを紹介

PythonのGUIツールキットであるPyQtでの画面開発で使用できるQtWidgetsについて整理して紹介します。

Contents

PyQtの画面開発で使えるWidget

PyQtでは、画面の構成要素として使用できるウィジェットがQtWidgetsに多く用意されています。本記事ではPyQtで使える画面構成要素を一つ一つ紹介していきます。

PyQtでの画面開発のテンプレートとしては「QWidgetを継承した画面開発のテンプレート」「QMainWindowを継承した画面開発のテンプレート」で紹介しています。

本記事では「QWidgetを継承した画面開発テンプレート」をベースに各種ウィジェットを配置する方法を紹介しています。今回紹介するようなWidgetを画面配置していくことで色々な画面を開発できるようになります。

なお、ウィジェットが使えるようになるとレイアウト配置したくなってくるかと思いますが、レイアウトについては「ウィジェットのレイアウト方法」でもまとめていますので興味があれば参考にしてください。

QLabel:ラベル

基本的な使い方

ラベルを表示するための「QLabel」について紹介します。QLabelは、基本的には以下のように使用します。

import sys

from PyQt6 import QtCore as qtc
from PyQt6 import QtGui as qtg
from PyQt6 import QtWidgets as qtw


class MainWindow(qtw.QWidget):
    """メインウィンドウ"""

    def __init__(self):
        super().__init__()
        self.setWindowTitle("QLabel")
        self.resize(320, 240)

        # ===== QLabel 基本的な使い方
        label = qtw.QLabel("QLabel サンプル", self)

        # 画面表示
        self.show()


def main():
    """メイン関数"""
    app = qtw.QApplication(sys.argv)
    mv = MainWindow()
    sys.exit(app.exec())


if __name__ == "__main__":
    main()

【表示結果】

QLabel サンプル

ラベルは、QLabelに表示する文字列を渡すことで使用します。以降で紹介する各種Widgetも同様ですが、親画面が分かるようにselfを指定します。

以降での使い方のバリエーションを紹介します。実行は上記プログラムをベースとして、定義部分を置き換えて使ってみてください。なお、以降で紹介する引数は一つ一つ紹介しますが、複数組み合わせで指定して使用可能です。

テキストを後で設定する setText

QLabelで表示する文字列については、setTextメソッドでQLabelを生成後に値を設定することができます。プログラムの処理の結果によりラベルを変更するとき等に使用できます。

        # ===== QLabel テキストを後で設定する
        label = qtw.QLabel(self)
        label.setText("QLabel サンプル")

【表示結果】

QLabel サンプル setText

インデントを設定する indent

QLabelで表示する文字列にインデントを設定する場合には、以下のようにindent引数に値を設定します。

        # ===== QLabel インデントを設定する
        label = qtw.QLabel("QLabel サンプル", self, indent=50)

【表示結果】

QLabel サンプル indent

マージンを設定する margin

QLabelで表示する文字列にマージンを設定する場合には、以下のようにmargin引数に値を設定します。

        # ===== QLabel マージンを設定する
        label = qtw.QLabel("QLabel サンプル", self, margin=50)

【表示結果】

QLabel サンプル margin

折り返しを設定する wordWrap=True

QLabelで表示する文字列に折り返しの設定をする場合には、wordWrap引数をTrueに設定します。

        # ===== QLabel 折り返しを設定する
        label = qtw.QLabel("QLabel サンプル xxxxx yyyyy zzzzz", self, wordWrap=True)

【表示結果】

QLabel サンプル wordWrap

リッチテキストを表示する

QLabelは、リッチテキストを表示することも可能です。以下は、ボールド(太字)で文字列を表示している例です。

        # ===== QLabel リッチテキストを表示
        label = qtw.QLabel("<b>QLabel サンプル</b>", self)

【表示結果】

QLabel サンプル リッチテキスト

QLineEdit:エディット欄

基本的な使い方

利用者の入力欄(エディット欄)を表示するための「QLineEdit」について紹介します。QLineEditは、基本的には以下のように使用します。

import sys

from PyQt6 import QtCore as qtc
from PyQt6 import QtGui as qtg
from PyQt6 import QtWidgets as qtw


class MainWindow(qtw.QWidget):
    """メインウィンドウ"""

    def __init__(self):
        super().__init__()
        self.setWindowTitle("QLineEdit")
        self.resize(320, 240)

        # ===== QLineEdit 基本的な使い方
        line_edit = qtw.QLineEdit(self)

        # 画面表示
        self.show()


def main():
    """メイン関数"""
    app = qtw.QApplication(sys.argv)
    mv = MainWindow()
    sys.exit(app.exec())


if __name__ == "__main__":
    main()

【表示結果】

QLineEdit サンプル

エディット欄のため利用者が値を入力することができます。入力された値を使ってプログラムのデータとして利用することが可能です。

以降での使い方のバリエーションを紹介します。実行は上記プログラムをベースとして、定義部分を置き換えて使ってみてください。なお、以降で紹介する引数は一つ一つ紹介しますが、複数組み合わせで指定して使用可能です。

デフォルト値を設定する

QLineEditは、第1引数に文字列を渡すことで以下のようにデフォルト値として値を設定した状態で画面表示することが可能です。

        # ===== QLineEdit デフォルト値を設定する
        line_edit = qtw.QLineEdit("デフォルト値", self)

【表示結果】

QLineEdit サンプル デフォルト値

プレースホルダーテキストの表示 placeholderText

入力欄(エディット欄)では、どういった入力をするべきか利用者が分かるようにプレースホルダーテキストを設定することがあります。プレースホルダーテキストとは、入力されるまでの間フィールドの内側に表示される説明文のことです。

QLineEditで、プレースホルダーテキストを設定したい場合は、以下のようにplaceholderText引数に文字列を指定します。

        # ===== QLineEdit プレースホルダーテキストの表示
        line_edit = qtw.QLineEdit(self, placeholderText="入力してください。")

【表示結果】

QLineEdit サンプル placeholderText

クリアボタンの表示 clearButtonEnabled=True

値が入力された際に簡単にクリアできるボタンを表示するには、以下のようにclearButtonEnabled引数をTrueを設定します。

        # ===== QLineEdit クリアボタンの表示
        line_edit = qtw.QLineEdit(self, clearButtonEnabled=True)

【表示結果】

QLineEdit サンプル clearButtonEnabled

最大文字数の指定 maxLength

QLineEditで入力させる最大文字数を指定したい場合は、以下のようにmaxLength引数に最大文字数を指定します。これにより、最大指定文字数以上は入力しようと思っても入力できなくなります。なお、文字数のため全角の日本語でも指定文字数分を入力できます。

        # ===== QLineEdit 最大長の指定
        line_edit = qtw.QLineEdit(self, maxLength=10)

【表示結果】

QLineEdit サンプル maxLength

QTextEdit:テキストエディット欄

基本的な使い方

利用者のテキスト入力欄を表示するための「QTextEdit」について紹介します。QTextEditは、基本的には以下のように使用します。

import sys

from PyQt6 import QtCore as qtc
from PyQt6 import QtGui as qtg
from PyQt6 import QtWidgets as qtw


class MainWindow(qtw.QWidget):
    """メインウィンドウ"""

    def __init__(self):
        super().__init__()
        self.setWindowTitle("QTextEdit")
        self.resize(320, 240)

        # ===== QTextEdit 基本的な使い方
        textedit = qtw.QTextEdit(self)

        # 画面表示
        self.show()


def main():
    """メイン関数"""
    app = qtw.QApplication(sys.argv)
    mv = MainWindow()
    sys.exit(app.exec())


if __name__ == "__main__":
    main()

【表示結果】

QTextEdit サンプル

QLineEditが1行であったのに対して、QTextEditはメモ帳などのように改行したりしてテキストを入力できます。

以降での使い方のバリエーションを紹介します。実行は上記プログラムをベースとして、定義部分を置き換えて使ってみてください。なお、以降で紹介する引数は一つ一つ紹介しますが、複数組み合わせで指定して使用可能です。

プレースホルダーテキストの表示 placeholderText

テキスト欄では、どういった入力をするべきか利用者が分かるようにプレースホルダーテキストを設定することがあります。プレースホルダーテキストとは、入力されるまでの間フィールドの内側に表示される説明文のことです。

QTextEditで、プレースホルダーテキストを設定したい場合は、以下のようにplaceholderText引数に文字列を指定します。

        # ===== QTextEdit プレースホルダーテキストの表示
        textedit = qtw.QTextEdit(self, placeholderText="テキストを入力してください。")

【表示結果】

QTextEdit サンプル placeholderText

折り返し設定 lineWrapMode, lineWrapColumnOrWidth

QTextEditで折り返し設定を指定したい場合は、以下のようにlineWrapMode引数にqtw.QTextEdit.LineWrapMode.FixedColumnWidthを設定し、lineWrapColumnOrWidth引数に文字数を設定します。なお、文字数のため全角の日本語でも指定文字数分で折り返しされます。

        # ===== QTextEdit 折り返し設定
        textedit = qtw.QTextEdit(
            self,
            lineWrapMode=qtw.QTextEdit.LineWrapMode.FixedColumnWidth,
            lineWrapColumnOrWidth=20,
        )

【表示結果】

QTextEdit サンプル lineWrapMode lineWrapColumnOrWidth

テキストを入力した状態で表示 plainText

QTextEditで、テキストを入力した状態で表示したい場合は、以下のようにplainText引数に文字列を渡します。

        # ===== QTextEdit テキストを入力した状態で表示
        textedit = qtw.QTextEdit(self, plainText="テキスト")

【表示結果】

QTextEdit サンプル plainText

リッチテキストを表示 html

QTextEditで、リッチテキストを入力した状態で表示したい場合は、以下のようにhtml引数に文字列を渡します。

        # ===== QTextEdit リッチテキストを表示
        textedit = qtw.QTextEdit(self, html="<b>テキスト</b>")

【表示結果】

QTextEdit サンプル html

リッチテキストを許可しない acceptRichText=False

QTextEditでリッチテキストを許可しないようにするには、acceptRichText引数をFalseに設定します。この設定でリッチテキストをコピペしようとするとプレーンテキストに変換されてペーストされます。

        # ===== QTextEdit Rich Textを許可しない
        textedit = qtw.QTextEdit(self, acceptRichText=False)

【表示結果】

QTextEdit サンプル acceptRichText=False

QPushButton:ボタン

基本的な使い方

ボタンを表示するための「QPushButton」について紹介します。QPushButtonは、基本的には以下のように使用します。

import sys

from PyQt6 import QtCore as qtc
from PyQt6 import QtGui as qtg
from PyQt6 import QtWidgets as qtw


class MainWindow(qtw.QWidget):
    """メインウィンドウ"""

    def __init__(self):
        super().__init__()
        self.setWindowTitle("QPushButton")
        self.resize(320, 240)

        # ===== QPushButton 一般的な使い方
        push_button = qtw.QPushButton("ボタン名", self)

        # 画面表示
        self.show()


def main():
    """メイン関数"""
    app = qtw.QApplication(sys.argv)
    mv = MainWindow()
    sys.exit(app.exec())


if __name__ == "__main__":
    main()

【表示結果】

QPushButton サンプル

QPushButtonは、機能の実行や取消など様々なトリガーとして使用することができます。

以降での使い方のバリエーションを紹介します。実行は上記プログラムをベースとして、定義部分を置き換えて使ってみてください。なお、以降で紹介する引数は一つ一つ紹介しますが、複数組み合わせで指定して使用可能です。

ショートカットキーの設定 shortcut

QPushButtonにショートカットを設定するには、以下のようにshortcut引数にqtg.QKeySequence(“Ctrl+P”)のように指定します。このようにしておくことで、マウスでクリックしなくてもCtrl+Pを押すとボタンがクリックできるようになります。もちろん文字列の部分を変えれば別のキーをショートカットにすることも可能です。

        # ===== QPushButton ショートカットキーの設定
        push_button = qtw.QPushButton("クリック", self, shortcut=qtg.QKeySequence("Ctrl+P"))

【表示結果】

QPushButton サンプル shortcut

ボタン押下した時に押下状態を保持 checkable=True

QPushButtonで、ボタンを押したときにボタンを押した状態のままにしたい場合には、checkable引数をTrueに設定します。

        # ===== QPushButton ボタン押下した時に押下状態を保持
        push_button = qtw.QPushButton("クリック", self, checkable=True)

【表示結果】

QPushButton サンプル checkable=True
QPushButton サンプル checkable=True

ボタン押下した時に押下状態を保持(チェック状態で表示) checkable=True, checked=True

QPushButtonで、チェック状態で表示して押下状態を保持したい場合には、以下のようにcheckable引数とchecked引数をTrueに設定します。

        # ===== QPushButton ボタン押下した時に押下状態を保持(チェック状態で表示)
        push_button = qtw.QPushButton("クリック", self, checkable=True, checked=True)

【表示結果】

QPushButton サンプル checkable=True, checkable=True

QCheckBox:チェックボックス

基本的な使い方

チェックボックスを表示するための「QCheckBox」について紹介します。QCheckBoxは、基本的には以下のように使用します。

import sys

from PyQt6 import QtCore as qtc
from PyQt6 import QtGui as qtg
from PyQt6 import QtWidgets as qtw


class MainWindow(qtw.QWidget):
    """メインウィンドウ"""

    def __init__(self):
        super().__init__()
        self.setWindowTitle("QCheckBox")
        self.resize(320, 240)

        # ===== QCheckBox 基本的な使い方
        checkbox = qtw.QCheckBox("チェック", self)

        # 画面表示
        self.show()


def main():
    """メイン関数"""
    app = qtw.QApplication(sys.argv)
    mv = MainWindow()
    sys.exit(app.exec())


if __name__ == "__main__":
    main()

【表示結果】

QCheckBox サンプル

以降での使い方のバリエーションを紹介します。実行は上記プログラムをベースとして、定義部分を置き換えて使ってみてください。なお、以降で紹介する引数は一つ一つ紹介しますが、複数組み合わせで指定して使用可能です。

ショートカットキーの設定 shortcut

QCheckBoxにショートカットを設定するには、以下のようにshortcut引数にqtg.QKeySequence(“Ctrl+P”)のように指定します。このようにしておくことで、マウスでクリックしなくてもCtrl+Pを押すとチェックを入れたり外したりできるようになります。もちろん文字列の部分を変えれば別のキーをショートカットにすることも可能です。

        # ===== QCheckBox ショートカットキーの設定
        checkbox = qtw.QCheckBox("チェック", self, shortcut=qtg.QKeySequence("Ctrl+P"))

【表示結果】

QCheckBox サンプル shortcut

チェック状態で表示 checked

QCheckBoxでチェック状態で表示したい場合は、以下のようにchecked引数をTrueに設定します。

        # ===== QCheckBox チェック状態で表示
        checkbox = qtw.QCheckBox("チェック", self, checked=True)

【表示結果】

QCheckBox サンプル checked

QRadioButton:ラジオボタン

基本的な使い方

ラジオボタンを表示するための「QRadioButton」について紹介します。QRadioButtonは、基本的には以下のように使用します。

import sys

from PyQt6 import QtCore as qtc
from PyQt6 import QtGui as qtg
from PyQt6 import QtWidgets as qtw


class MainWindow(qtw.QWidget):
    """メインウィンドウ"""

    def __init__(self):
        super().__init__()
        self.setWindowTitle("QRadioButton")
        self.resize(320, 240)

        # ===== QRadioButton 基本的な使い方
        radio_button = qtw.QRadioButton("チェック", self)

        # 画面表示
        self.show()


def main():
    """メイン関数"""
    app = qtw.QApplication(sys.argv)
    mv = MainWindow()
    sys.exit(app.exec())


if __name__ == "__main__":
    main()

【表示結果】

QRadioButton サンプル

以降での使い方のバリエーションを紹介します。実行は上記プログラムをベースとして、定義部分を置き換えて使ってみてください。なお、以降で紹介する引数は一つ一つ紹介しますが、複数組み合わせで指定して使用可能です。

ショートカットキーの設定 shortcut

QRadioButtonにショートカットを設定するには、以下のようにshortcut引数にqtg.QKeySequence(“Ctrl+P”)のように指定します。このようにしておくことで、マウスでクリックしなくてもCtrl+Pを押すとチェックを入れたり外したりできるようになります。もちろん文字列の部分を変えれば別のキーをショートカットにすることも可能です。

        # ===== QRadioButton ショートカットキーの設定
        radio_button = qtw.QRadioButton("チェック", self, shortcut=qtg.QKeySequence("Ctrl+P"))

【表示結果】

QRadioButton サンプル shortcut

チェック状態で表示 checked

QRadioButtonでチェック状態で表示したい場合は、以下のようにchecked引数をTrueに設定します。

        # ===== QRadioButton チェック状態で表示
        radio_button = qtw.QRadioButton("チェック", self, checked=True)

【表示結果】

QRadioButton サンプル checked

QComboBox:コンボボックス

基本的な使い方

コンボボックスを表示するための「QComboBox」について紹介します。QComboBoxは、基本的には以下のように使用します。

import sys

from PyQt6 import QtCore as qtc
from PyQt6 import QtGui as qtg
from PyQt6 import QtWidgets as qtw


class MainWindow(qtw.QWidget):
    """メインウィンドウ"""

    def __init__(self):
        super().__init__()
        self.setWindowTitle("QComboBox")
        self.resize(320, 240)

        # ===== QComboBox 基本的な使い方
        combobox = qtw.QComboBox(self)
        combobox.addItem("item 1", 1)
        combobox.addItem("item 2", "text")
        combobox.addItem("item 3", qtw.QWidget)
        combobox.insertItem(1, "item 1.5", 2)

        # 画面表示
        self.show()


def main():
    """メイン関数"""
    app = qtw.QApplication(sys.argv)
    mv = MainWindow()
    sys.exit(app.exec())


if __name__ == "__main__":
    main()

【表示結果】

QComboBox サンプル
初期表示
QComboBox サンプル
コンボボックス表示

コンボボックスに表示する項目はaddItemメソッドで追加ができます。また、位置を指定して項目を挿入したい場合はinsertItemメソッドを使用します。

なお、各メソッドでは項目名と値を設定しています。値を設定しておくことで、選択された項目に合わせた値を取得してプログラムで使用することができます。以下のようにWidgetを設定したりできる点も面白い点です。

        combobox.addItem("item 3", qtw.QWidget)

QSpinBox:スピンボックス

基本的な使い方

スピンボックスを表示するための「QSpinBox」について紹介します。QSpinBoxは、基本的には以下のように使用します。

import sys

from PyQt6 import QtCore as qtc
from PyQt6 import QtGui as qtg
from PyQt6 import QtWidgets as qtw


class MainWindow(qtw.QWidget):
    """メインウィンドウ"""

    def __init__(self):
        super().__init__()
        self.setWindowTitle("QSpinBox")
        self.resize(320, 240)

        # ===== QSpinBox 基本的な使い方
        spinbox = qtw.QSpinBox(self, value=50, minimum=0, maximum=100)

        # 画面表示
        self.show()


def main():
    """メイン関数"""
    app = qtw.QApplication(sys.argv)
    mv = MainWindow()
    sys.exit(app.exec())


if __name__ == "__main__":
    main()

【表示結果】

QSpinBox サンプル

QSpinBoxは、上記のように値を上下のボタンで増やしたり減らしたりできます。また、直接編集して値を入力することも可能です。また、minumum引数とmaximum引数で値の範囲を制限することができます。

以降での使い方のバリエーションを紹介します。実行は上記プログラムをベースとして、定義部分を置き換えて使ってみてください。なお、以降で紹介する引数は一つ一つ紹介しますが、複数組み合わせで指定して使用可能です。

ステップ数を設定 singleStep

QSpinBoxで、値のステップ数を設定したい場合は、以下のようにsingleStep引数にステップ数を設定します。以下の例では、上下のボタンを押すごとに5ずつ値が変化します。

        # ===== QSpinBox ステップ数を設定
        spinbox = qtw.QSpinBox(self, value=50, minimum=0, maximum=100, singleStep=5)

【表示結果】

QSpinBox サンプル singleStep
初期表示
QSpinBox サンプル singleStep
↑を1回クリックした時

プレフィックスとサフィックスの表示 prefix, suffix

QSpinBoxで、値の前につくプレフィックスと後につくサフィックスを表示したい場合には、以下のようにprefix引数やsuffix引数に文字列を指定します。

        # ===== QSpinBox プレフィックスとサフィックスを表示
        spinbox = qtw.QSpinBox(
            self, value=50, minimum=0, maximum=100, prefix="¥", suffix="+ 税"
        )

【表示結果】

QSpinBox サンプル prefix suffix

QDateTimeEdit:日付エディット

基本的な使い方

日付エディット欄を表示するための「QDateTimeEdit」について紹介します。QDateTimeEditは、基本的には以下のように使用します。

import sys

from PyQt6 import QtCore as qtc
from PyQt6 import QtGui as qtg
from PyQt6 import QtWidgets as qtw


class MainWindow(qtw.QWidget):
    """メインウィンドウ"""

    def __init__(self):
        super().__init__()
        self.setWindowTitle("QDateTimeEdit")
        self.resize(320, 240)

        # ===== QDateTimeEdit 基本的な使い方
        datetimebox = qtw.QDateTimeEdit(
            self, date=qtc.QDate.currentDate(), time=qtc.QTime(0, 0)
        )

        # 画面表示
        self.show()


def main():
    """メイン関数"""
    app = qtw.QApplication(sys.argv)
    mv = MainWindow()
    sys.exit(app.exec())


if __name__ == "__main__":
    main()

【表示結果】

QDateTimeEdit サンプル

上記のように日付エディット欄が表示され、時間情報を入力することができます。初期表示の値はdate引数やtime引数に、qtc.QDateやqtc.QTimeを使って時間を日付や時刻を設定することができます。また、qtc.QDate.currentDate()やqtc.QTime.currentTime()を使うことで現在日付や時刻を取得することも可能です。

以降での使い方のバリエーションを紹介します。実行は上記プログラムをベースとして、定義部分を置き換えて使ってみてください。なお、以降で紹介する引数は一つ一つ紹介しますが、複数組み合わせで指定して使用可能です。

日時フォーマットの指定 displayFormat

QDateTimeEditで、日付フォーマットを指定したい場合は、以下のようにdisplayFormat引数にフォーマットを表す文字列を指定します。

        # ===== QDateTimeEdit 日時フォーマットの指定
        datetimebox = qtw.QDateTimeEdit(
            self,
            date=qtc.QDate.currentDate(),
            time=qtc.QTime(0, 0),
            displayFormat="yyyy-MM-dd HH:mm:ss",
        )

【表示結果】

QDateTimeEdit サンプル dsplayFormat

なお、日付・時刻のフォーマットとしては以下のようなものが使用できます。

フォーマット文字内容
d
M
yy年(2桁)
yyyy年(4桁)
H時間
m
s

カレンダーのポップアップを設定 calendarPopup=True

QDateTimeEditで、カレンダーで入力するためのポップアップを表示できるようにするには、calendarPopup引数をTrueに設定します。以下のように、カレンダーを表示して利用者に入力してもらうことが可能になります。

        # ===== QDateTimeEdit カレンダーのポップアップを設定
        datetimebox = qtw.QDateTimeEdit(
            self, date=qtc.QDate.currentDate(), time=qtc.QTime(0, 0), calendarPopup=True
        )

【表示結果】

QDateTimeEdit サンプル calendarPopup
初期表示
QDateTimeEdit サンプル calendarPopup
カレンダーポップアップ

期間の最大・最小を設定 minimumDate, maximumDate

QDateTimeEditで、指定できる期間の最大、最少を設定するには、minimumDate引数やmaximumDate引数に日付情報を設定します。

        # ===== QDateTimeEdit 期間の最大・最小を設定
        datetimebox = qtw.QDateTimeEdit(
            self,
            date=qtc.QDate.currentDate(),
            time=qtc.QTime(0, 0),
            calendarPopup=True,
            minimumDate=qtc.QDate(2000, 1, 1),
            maximumDate=qtc.QDate(2030, 12, 31),
        )

【表示結果】

QDateTimeEdit サンプル minimumDate maximumDate

まとめ

PythonのGUIツールキットであるPyQtでの画面開発で使用できるQtWidgetsについて整理して紹介しました。Qtで提供されているすべてを網羅できているわけではありませんが、中心的なWidgetについて多く紹介しました。

PyQtを使った画面開発際の参考としていただければよいかなと思います。