PyQt5 - QCheckBox 控制元件



QCheckBox物件新增到父視窗時,文字標籤前面會出現一個矩形框。與QRadioButton一樣,它也是一個可選按鈕。它的常見用途是在使用者被要求選擇一個或多個可用選項的場景中。

與單選按鈕不同,複選框預設情況下不是互斥的。為了將選擇限制在一個可用專案中,必須將複選框新增到QButtonGroup。

下表列出了常用的QCheckBox類方法:

序號 方法及描述
1

setChecked()

更改複選框按鈕的狀態

2

setText()

設定與按鈕關聯的標籤

3

text()

檢索按鈕的標題

4

isChecked()

檢查按鈕是否被選中

5

setTriState()

為複選框提供無變化狀態

每次選中或清除複選框時,物件都會發出stateChanged()訊號。

示例

這裡,兩個QCheckBox物件被新增到水平佈局中。它們的stateChanged()訊號連線到btnstate()函式。使用lambda將訊號的源物件傳遞給函式。

self.b1.stateChanged.connect(lambda:self.btnstate(self.b1))
self.b2.toggled.connect(lambda:self.btnstate(self.b2))

isChecked()函式用於檢查按鈕是否被選中。

if b.text() == "Button1":
   if b.isChecked() == True:
      print b.text()+" is selected"
   else:
      print b.text()+" is deselected"

完整的程式碼如下:

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

class checkdemo(QWidget):
   def __init__(self, parent = None):
      super(checkdemo, self).__init__(parent)
      
      layout = QHBoxLayout()
      self.b1 = QCheckBox("Button1")
      self.b1.setChecked(True)
      self.b1.stateChanged.connect(lambda:self.btnstate(self.b1))
      layout.addWidget(self.b1)
		
      self.b2 = QCheckBox("Button2")
      self.b2.toggled.connect(lambda:self.btnstate(self.b2))

      layout.addWidget(self.b2)
      self.setLayout(layout)
      self.setWindowTitle("checkbox demo")

   def btnstate(self,b):
      if b.text() == "Button1":
         if b.isChecked() == True:
            print b.text()+" is selected"
         else:
            print b.text()+" is deselected"
				
      if b.text() == "Button2":
         if b.isChecked() == True:
            print b.text()+" is selected"
         else:
            print b.text()+" is deselected"
				
def main():

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

輸出

以上程式碼產生以下輸出:

CheckBox Buttons
Button2 is selected
Button2 is deselected
Button1 is deselected
Button1 is selected

如前所述,可以透過將checkBox按鈕新增到QButtonGroup物件中來使其互斥。

self.bg = QButtonGroup()
self.bg.addButton(self.b1,1)
self.bg.addButton(self.b2,2)

QButtonGroup物件為按鈕提供抽象容器,並且沒有視覺化表示。它發出buttonCliked()訊號並將Button物件的引用傳送到槽函式btngroup()。

self.bg.buttonClicked[QAbstractButton].connect(self.btngroup)

btngroup()函式顯示被點選的複選框的標題。

def btngroup(self,btn):
   print btn.text()+" is selected"

進行上述更改後,應用程式視窗顯示如下:

btngroup
Button1 is selected
Button2 is selected
Button1 is selected
pyqt_basic_widgets.htm
廣告
© . All rights reserved.