1. 程式人生 > >PyQt5基本控制元件詳解之QCheckBox(八)

PyQt5基本控制元件詳解之QCheckBox(八)

QCheckBox

QCheckBox類中常用方法如表

方法 描述
setChecked() 設定複選框的狀態,設定為True表示選中,False表示取消選中的複選框
setText() 設定複選框的顯示文字
text() 返回複選框的顯示文字
isChecked() 檢查複選框是否被選中
setTriState() 設定複選框為一個三態複選框
setCheckState() 三態複選框的狀態設定,具體設定可以見下表

三態複選框的三種狀態

名稱 含義
Qt.Checked 2 元件沒有被選中(預設)
Qt.PartiallyChecked 1 元件被半選中
Qt.Unchecked 0 元件被選中

例項:QCheckBox按鈕的使用

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt


class CheckBoxDemo(QWidget):

    def __init__(self, parent=None)
:
super(CheckBoxDemo, self).__init__(parent) #建立一個GroupBox組 groupBox = QGroupBox("Checkboxes") groupBox.setFlat(False) #建立複選框1,並預設選中,當狀態改變時訊號觸發事件 self.checkBox1 = QCheckBox("&Checkbox1") self.checkBox1.setChecked(True) self.checkBox1.stateChanged.connect(lambda
: self.btnstate(self.checkBox1)) #建立複選框,標記狀態改變時訊號觸發事件 self.checkBox2 = QCheckBox("Checkbox2") self.checkBox2.toggled.connect(lambda: self.btnstate(self.checkBox2)) #建立複選框3,設定為3狀態,設定預設選中狀態為半選狀態,當狀態改變時訊號觸發事件 self.checkBox3 = QCheckBox("tristateBox") self.checkBox3.setTristate(True) self.checkBox3.setCheckState(Qt.PartiallyChecked) self.checkBox3.stateChanged.connect(lambda: self.btnstate(self.checkBox3)) #水平佈局 layout = QHBoxLayout() #控制元件新增到水平佈局中 layout.addWidget(self.checkBox1) layout.addWidget(self.checkBox2) layout.addWidget(self.checkBox3) #設定QGroupBox組的佈局方式 groupBox.setLayout(layout) #設定主介面佈局垂直佈局 mainLayout = QVBoxLayout() #QgroupBox的控制元件新增到主介面佈局中 mainLayout.addWidget(groupBox) #設定主介面佈局 self.setLayout(mainLayout) #設定主介面標題 self.setWindowTitle("checkbox demo") #輸出三個複選框當前的狀態,0選中,1半選,2沒選中 def btnstate(self, btn): chk1Status = self.checkBox1.text() + ", isChecked=" + str(self.checkBox1.isChecked()) + ', chekState=' + str( self.checkBox1.checkState()) + "\n" chk2Status = self.checkBox2.text() + ", isChecked=" + str(self.checkBox2.isChecked()) + ', checkState=' + str( self.checkBox2.checkState()) + "\n" chk3Status = self.checkBox3.text() + ", isChecked=" + str(self.checkBox3.isChecked()) + ', checkState=' + str( self.checkBox3.checkState()) + "\n" print(chk1Status + chk2Status + chk3Status) if __name__ == '__main__': app = QApplication(sys.argv) checkboxDemo = CheckBoxDemo() checkboxDemo.show() sys.exit(app.exec_())

效果圖如下

這裡寫圖片描述
程式碼分析:
    在這個例子中,將三個複選框新增到一個水平佈局管理器中,並新增到一個QGroupBox組中
  groupBox = QGroupBox("Checkboxes")
  groupBox.setFlat(False)

將三個複選框的stateChanged訊號都連線到槽函式stateChanged(),使用landba的方式傳遞物件給槽函式
當QCheckBox狀態改變時發射stateChanged訊號,當訊號發生改變時觸發自定義的槽函式btnstate()

self.checkBox1.stateChanged.connect(lambda: self.btnstate(self.checkBox1))
self.checkBox2.toggled.connect(lambda: self.btnstate(self.checkBox2))
self.checkBox3.stateChanged.connect(lambda: self.btnstate(self.checkBox3))

例項化物件CheckBox1和CheckBox2兩個物件,將CheckBox1的狀態設定為選中,為CheckBox1設定為快捷鍵,使用‘&’符號,則可以通過快捷鍵Alt+C選中checkbox1複選框

self.checkBox1 = QCheckBox("&Checkbox1")
self.checkBox1.setChecked(True)

使用按鈕的isChecked()方法,判斷複選框是否被選中,其核心程式碼是:

chk1Status = self.checkBox1.text() + ", isChecked=" + str(self.checkBox1.isChecked()) + ', chekState=' + str(
            self.checkBox1.checkState()) + "\n"

例項化一個QCheckBox類的物件checkBox3,然後使用setTristate()開啟三態模式,然後設定為半選狀態並連線槽函式

self.checkBox3 = QCheckBox("tristateBox")
self.checkBox3.setTristate(True)
self.checkBox3.setCheckState(Qt.PartiallyChecked)
self.checkBox3.stateChanged.connect(lambda: self.btnstate(self.checkBox3))