iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0
Python

pythonGUI學習筆記系列 第 10

Day 10: PySide6 複選按鈕 (QCheckBox)和單選按鈕 (QRadioButton)

  • 分享至 

  • xImage
  •  

複選按鈕 (QCheckBox)和單選按鈕 (QRadioButton)

  • QCheckBox (複選按鈕) : 是一種可以多選的按鈕,允許用戶選擇多個選項。
  • QRadioButton(單選按鈕) : 是一種單選按鈕,通常成組使用,允許用戶在多個選項中僅選擇一個。

1. QCheckBox 使用

QCheckBox : 複選按鈕,用於允許用戶選擇多個選項。例如,在表單中,用戶可以勾選多個複選框來同時選擇多個項目。

QCheckBox 添加按鈕

  • QCheckBox(str) : 添加按鈕。下面是一個添加兩個複選按鈕的範例。
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QCheckBox, QLabel

class CheckBoxExample(QWidget):
    def __init__(self):
        super().__init__()

        # 創建佈局
        layout = QVBoxLayout()

        # 創建 QCheckBox
        checkbox1 = QCheckBox("選項1")
        checkbox2 = QCheckBox("選項2")

        # 添加元件到佈局
        layout.addWidget(checkbox1)
        layout.addWidget(checkbox2)
        self.setLayout(layout)

if __name__ == "__main__":
    app = QApplication([])
    window = CheckBoxExample()
    window.show()
    app.exec()

QCheckBox 常用的信號

  • checkStateChanged.connect(function) : 當勾選狀態改變時,會發送信號。下面範例是當按鈕狀態改變時,標籤文字會改變。
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QCheckBox, QLabel

class CheckBoxExample(QWidget):
    def __init__(self):
        super().__init__()

        # 創建佈局
        layout = QVBoxLayout()

        # 創建 QCheckBox
        checkbox1 = QCheckBox("選項1")
        checkbox2 = QCheckBox("選項2")
        #創建標籤
        label = QLabel("空")

        checkbox1.checkStateChanged.connect(lambda: label.setText("選項1按鈕改變了"))
        checkbox2.checkStateChanged.connect(lambda: label.setText("選項2按鈕改變了"))

        # 添加元件到佈局
        layout.addWidget(checkbox1)
        layout.addWidget(checkbox2)
        layout.addWidget(label)
        self.setLayout(layout)

if __name__ == "__main__":
    app = QApplication([])
    window = CheckBoxExample()
    window.show()
    app.exec()

QCheckBox 常用的功能

  • setChecked(bool) : 設定按鈕的勾選狀態。下面範例是創建一個QCeckBox並預設是勾選。
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QCheckBox, QLabel

class CheckBoxExample(QWidget):
    def __init__(self):
        super().__init__()

        # 創建 QCheckBox,並預設選項1初始是勾選的
        checkbox1 = QCheckBox("選項1",self)
        checkbox1.setChecked(True)

if __name__ == "__main__":
    app = QApplication([])
    window = CheckBoxExample()
    window.show()
    app.exec()
  • setDisabled(bool) : 設定是否禁用。下面範例是創建一格QCheckBox並禁用。
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QCheckBox, QLabel

class CheckBoxExample(QWidget):
    def __init__(self):
        super().__init__()

        # 創建 QCheckBox,並禁用選項1
        checkbox1 = QCheckBox("選項1",self)
        checkbox1.setDisabled(True)

if __name__ == "__main__":
    app = QApplication([])
    window = CheckBoxExample()
    window.show()
    app.exec()
  • isChecked(bool) : 用於得知目前按鈕的狀態。下面範例是print按鈕的狀態。
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QCheckBox, QLabel

class CheckBoxExample(QWidget):
    def __init__(self):
        super().__init__()

        # 創建 QCheckBox
        checkbox = QCheckBox("選項1",self)

        checkbox.checkStateChanged.connect(lambda: print(checkbox.isChecked()))

if __name__ == "__main__":
    app = QApplication([])
    window = CheckBoxExample()
    window.show()
    app.exec()

2. QRadioButton 使用

QRadioButton : 單選按鈕,通常為幾個按鈕為一組,例如,在表單中,用戶是男是女的單選,就可以使用。

QRadioButton 添加按鈕和編組

  • QRadioButton(str) : 添加按鈕。下面範例是新增按鈕男,女,台北,台中。
from PySide6.QtWidgets import QApplication, QWidget,  QRadioButton, QLabel , QGridLayout

class RadioButtonExample(QWidget):
    def __init__(self):
        super().__init__()

        # 創建 QRadioButton
        boy_button = QRadioButton("男")
        girl_button = QRadioButton("女")
        Taipei_button = QRadioButton("台北")
        Taichung_button = QRadioButton("台中")

        #布局
        layout = QGridLayout()
        layout.addWidget(boy_button,0,0)
        layout.addWidget(girl_button,0,1)
        layout.addWidget(Taipei_button,1,0)
        layout.addWidget(Taichung_button,1,1)
        self.setLayout(layout)

if __name__ == "__main__":
    app = QApplication([])
    window = RadioButtonExample()
    window.show()
    app.exec()

由於沒有把按鈕編組,所以你不管怎麼點選,都只能選一個。

  • QButtonGroup : 可以把按鈕分組。延續剛才的範例,將按鈕分成性別和地區。
from PySide6.QtWidgets import QApplication, QWidget,  QRadioButton, QLabel , QGridLayout , QButtonGroup

class RadioButtonExample(QWidget):
    def __init__(self):
        super().__init__()

        # 創建按鈕編組
        gender_group = QButtonGroup(self)
        region_group = QButtonGroup(self)

        # 創建 QRadioButton
        boy_button = QRadioButton("男")
        girl_button = QRadioButton("女")
        Taipei_button = QRadioButton("台北")
        Taichung_button = QRadioButton("台中")

        # 把按鈕添加到按鈕編組
        gender_group.addButton(boy_button)
        gender_group.addButton(girl_button)
        region_group.addButton(Taipei_button)
        region_group.addButton(Taichung_button)

        # 布局
        layout = QGridLayout()
        layout.addWidget(boy_button,0,0)
        layout.addWidget(girl_button,0,1)
        layout.addWidget(Taipei_button,1,0)
        layout.addWidget(Taichung_button,1,1)
        self.setLayout(layout)

if __name__ == "__main__":
    app = QApplication([])
    window = RadioButtonExample()
    window.show()
    app.exec()

QRadioButton 常用的信號

  • toggled.connect(function) : 當狀態改變時,會發送信號。下面範例是當按鈕狀態改變時,標籤文字會改變。
from PySide6.QtWidgets import QApplication, QWidget,  QRadioButton, QLabel , QVBoxLayout

class RadioButtonExample(QWidget):
    def __init__(self):
        super().__init__()

        # 創建 QRadioButton
        boy_button = QRadioButton("男")
        girl_button = QRadioButton("女")

        #創建標籤
        Label = QLabel("性別")

        #觸發
        boy_button.toggled.connect(lambda: Label.setText("性別:男"))
        girl_button.toggled.connect(lambda: Label.setText("性別:女"))

        #布局
        layout = QVBoxLayout()
        layout.addWidget(boy_button)
        layout.addWidget(girl_button)
        layout.addWidget(Label)
        self.setLayout(layout)

if __name__ == "__main__":
    app = QApplication([])
    window = RadioButtonExample()
    window.show()
    app.exec()

QRadioButton 常用的功能

  • isChecked(bool) : 用於得知目前按鈕的狀態。
  • setDisabled(bool): 設定是否禁用。
  • checkabale(bool) : 用來設定元件是否可以被選取,與 setDisabled(bool) 類似,但不同之處在於 checkable(bool) 設定後,元件仍然可以被點擊,但點擊後會切換選取狀態(例如選中或取消選中);而 setDisabled(bool) 則是完全禁用該元件,無法進行任何互動。
  • setChecked(bool) : 設定按鈕的勾選狀態。
    下面範例是將台中設置禁用,台北雖然可以點選,但點後人會切換成取消,預設是台南。
from PySide6.QtWidgets import QApplication, QWidget,  QRadioButton, QLabel , QGridLayout

class RadioButtonExample(QWidget):
    def __init__(self):
        super().__init__()

        # 創建 QRadioButton
        Tainan = QRadioButton("台南")
        Kaohsiung = QRadioButton("高雄")
        Taipei = QRadioButton("台北")
        Taichung = QRadioButton("台中")

        # 設定方法
        Tainan.setChecked(True)
        Taichung.setDisabled(True)
        Taipei.setCheckable(False)
        #布局
        layout = QGridLayout()
        layout.addWidget(Tainan,0,1)
        layout.addWidget(Kaohsiung,0,0)
        layout.addWidget(Taipei,1,0)
        layout.addWidget(Taichung,1,1)
        self.setLayout(layout)

if __name__ == "__main__":
    app = QApplication([])
    window = RadioButtonExample()
    window.show()
    app.exec()

總結

1. 複選按鈕 (QCheckBox)

  • QCheckBox 添加按鈕
功能 方法
添加按鈕 QCheckBox(str)
  • QCheckBox 常用的信號
功能 方法
勾選狀態改變 checkStateChanged.connect(function)
  • QCheckBox 常用的功能
功能 方法
設定按鈕勾選狀態 csetChecked(bool)
設定是否禁用 setDisabled(bool)
得知目前按鈕狀態 isChecked(bool)

2. 單選按鈕 (QRadioButton)

  • QRadioButton 添加按鈕和編組
功能 方法
添加按鈕 QRadioButton(str)
按鈕編組 QButtonGroup
  • QRadioButton 常用的信號
功能 方法
按鈕狀態改變 toggled.connect(function)
  • QRadioButton 常用的功能
功能 方法
按鈕可否被選取 checkabale(bool)
是否禁用 setDisabled(bool)
得知目前按鈕狀態 isChecked(bool)
設定按鈕勾選狀態 setChecked(bool)

上一篇
Day 9: PySide6 下拉選單 (QComboBox)
下一篇
Day 11: PySide6 日期調整 (QDateEdit)和時間調整(QTimeEdit)元件
系列文
pythonGUI學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言