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

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

ラズパイデスクトップでPyQt5入門(12)Widgets(1)

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

こんばんは。國松です。
今回はPyQt5のQCheckBox, toggleモードのQPushButtonにについて見て行きます。Widgets(ウィジェット)はアプリケーションの基本的な構成要素です。
PyQt5にはボタン、チェックボックス、スライダー、リストボックスなと様々なウィジェットがあります。

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

1.QCheckBox
チェックボックスはオンとオフの状態を持つウィジェットです。ラベルの付いた箱です。
いくつかあるオプションから複数の項目を選択するのに使われます。機能の有効、無効を選択するために使われたりもします。
今回はウィンドウのタイトルを切り替えるチェックボックスを作成していきます。

#ウィンドウのタイトルを切り替えるチェックボックスを作成
#!/usr/bin/python3
# -*- coding: utf-8 -*-

from PyQt5.QtWidgets import QWidget, QCheckBox, QApplication
from PyQt5.QtCore import Qt
import sys

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

    def initUI(self):
        #チェックボックスを作成
        cb = QCheckBox('Show title', self)
        cb.move(20,20)
        #チェックボックスにチェックを入れる
        cb.toggle()
        #チェックボックスの状態によってタイトルを変える    
        cb.stateChanged.connect(self.changeTitle)

        self.setGeometry(300,300,250,150)
        self.setWindowTitle('QCheckBox')
        self.show()

    def changeTitle(self,state):
        if state == Qt.Checked:
            self.setWindowTitle('QCheckBox')
        else:
            self.setWindowTitle(' ')

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

 

チェックボックスにチェックが入っているとウィンドウタイトルが「QCheckBox」と表示されチェックを外すと何も表示されなくなります。
※31行目の(‘’)のシングルクォーテーションとシングルクォーテーションの間は半角スペースを入れてください。入れない場合実行しているファイルの名前が表示されます。

cb.stateChanged.connect(self.changeTitle)
ユーザー定義のchangeTitle()メソッドをstateChangedシグナルに接続、ウィンドウのタイトルを切り替えます。

2.ToggleButton
特殊なモードのQPushButtonです。押された状態と押されていない状態の2つの状態を持つボタンです。2つの状態をクリックして切り替えます。
今回は3つのトグルボタンと1つのQWidgetを作成します。QWidgetの背景色の初期値を黒に設定しトグルボタンを押すことで背景色を切り替えるものを作成していきます。

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

"""
In this example, we create three toggle buttons.
They will control the backgraound color of a QFrame.
"""

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

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

    def initUI(self):
        self.col = QColor(0,0,0)    #色の初期値を黒に設定

        #トグルボタンを作成
        readb = QPushButton('Red',self)
        readb.setCheckable(True)
        readb.move(10,10)
        
        readb.clicked[bool].connect(self.setColor)
        
        greenb = QPushButton('Green',self)
        greenb.setCheckable(True)
        greenb.move(10,60)

        greenb.clicked[bool].connect(self.setColor)

        blueb = QPushButton('Blue',self)
        blueb.setCheckable(True)
        blueb.move(10,110)

        blueb.clicked[bool].connect(self.setColor)

        self.square = QFrame(self)
        self.square.setGeometry(150,20,100,100)
        self.square.setStyleSheet("QWidget { background-color: %s }" % self.            col.name())

        self.setGeometry(300,300,280,170)
        self.setWindowTitle('Toggle button')
        self.show()

    def setColor(self,pressed):
        #押されたボタンをsource変数に代入
        source = self.sender()
        
        #ボタンがクリックされたら色を設定
        if pressed:
            val = 255
        else: val = 0

        if source.text() == "Red":
            self.col.setRed(val)
        elif source.text() == "Green":
            self.col.setGreen(val)
        else:
            self.col.setBlue(val)

        #色を変える
        self.square.setStyleSheet("QFrame { background-color: %s }" % 
            self.col.name())

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

 

背景色はどのボタンが押されているかによって変わります。スタイルシートを使用して背景色を変更します。スタイルシートはsetStyleSheet()メソッドで更新されます。
赤、緑、青の3つ全部のボタンが押されていると白になります。

 

    上に戻る