QCheckBox 复选按钮

QCheckBox 复选按钮

QCheckBox 是 PyQt6 里的复选按钮控件,这篇教学会介绍如何在 PyQt6 视窗里加入 QCheckBox 复选按钮,并进行一些基本的样式设定,以及进行按钮群组和点击事件的设定。

快速预览:

  • 加入 QCheckBox 复选按钮

  • QCheckBox位置设置

  • QCheckBox 状态设定

  • QCheckBox 样式设定

  • QCheckBox 点击事件

加入 QCheckBox 复选按钮

建立 PyQt6 视窗物件后,透过 QtWidgets.QCheckBox(widget)方法,就能在指定的控件中建立复选按钮,下方的程式码执行后,会加入三个 QCheckBox 按钮 ,并使用 setText() 方法加入文字。

 from PyQt6 import QtWidgets
 import sys
 app = QtWidgets.QApplication(sys.argv)
 ​
 Form = QtWidgets.QWidget()
 Form.setWindowTitle('千牛编程思维')
 Form.resize(300, 200)
 ​
 cb_a = QtWidgets.QCheckBox(Form)    # 复选按钮 A
 cb_a.setGeometry(30, 60, 50, 20)
 cb_a.setText('A')
 ​
 cb_b = QtWidgets.QCheckBox(Form)    # 复选按钮 B
 cb_b.setGeometry(80, 60, 50, 20)
 cb_b.setText('B')
 ​
 cb_c = QtWidgets.QCheckBox(Form)    # 复选按钮 C
 cb_c.setGeometry(130, 60, 50, 20)
 cb_c.setText('C')
 ​
 Form.show()
 sys.exit(app.exec())

class 写法:

 from PyQt6 import QtWidgets
 import sys
 ​
 class MyWidget(QtWidgets.QWidget):
     def __init__(self):
         super().__init__()
         self.setWindowTitle('千牛编程思维')
         self.resize(300, 200)
         self.ui()
 ​
     def ui(self):
         self.cb_a = QtWidgets.QCheckBox(self)    # 复选按钮 A
         self.cb_a.setGeometry(30, 60, 50, 20)
         self.cb_a.setText('A')
 ​
         self.cb_b = QtWidgets.QCheckBox(self)    # 复选按钮 B
         self.cb_b.setGeometry(80, 60, 50, 20)
         self.cb_b.setText('B')
 ​
         self.cb_c = QtWidgets.QCheckBox(self)    # 复选按钮 C
         self.cb_c.setGeometry(130, 60, 50, 20)
         self.cb_c.setText('C')
 ​
 if __name__ == '__main__':
     app = QtWidgets.QApplication(sys.argv)
     Form = MyWidget()
     Form.show()
     sys.exit(app.exec())

QCheckBox位置设置

透过下列 QCheckBox 方法,可以将 QCheckBox 控件定位到指定的位置:

方法参数说明
移动x, y设定 QCheckBox 在摆放的父控件中的 xy 坐标,x 往右为正,y 往下为正,尺寸根据内容自动延伸。
设置几何()X,X,Y,W,H设定 QCheckBox 在摆放的父控件中的 xy 坐标和长宽尺寸,x 往右为正,y 往下为正,如果超过长宽尺寸,预设会被裁切无法显示。

下方的程式码执行后会放入四个 QCheckBox,两个使用 move() 定位,另外两个使用 setGeometry() 方法定位。

 from PyQt6 import QtWidgets
 import sys
 app = QtWidgets.QApplication(sys.argv)
 ​
 Form = QtWidgets.QWidget()
 Form.setWindowTitle('千牛编程思维')
 Form.resize(300, 200)
 ​
 cb_a = QtWidgets.QCheckBox(Form)    # 复选按钮 A
 cb_a.move(30, 60)
 cb_a.setText('A')
 ​
 cb_b = QtWidgets.QCheckBox(Form)    # 复选按钮 B
 cb_b.move(80, 60)
 cb_b.setText('B')
 ​
 cb_c = QtWidgets.QCheckBox(Form)    # 复选按钮 C
 cb_c.setGeometry(130, 60, 50, 20)
 cb_c.setText('C')
 ​
 cb_d = QtWidgets.QCheckBox(Form)    # 复选按钮 D
 cb_d.setGeometry(180, 60, 50, 20)
 cb_d.setText('D')
 ​
 Form.show()
 sys.exit(app.exec())

class 写法:

 from PyQt6 import QtWidgets
 import sys
 ​
 class MyWidget(QtWidgets.QWidget):
     def __init__(self):
         super().__init__()
         self.setWindowTitle('千牛编程思维')
         self.resize(300, 200)
         self.ui()
 ​
     def ui(self):
         self.cb_a = QtWidgets.QCheckBox(self)    # 复选按钮 A
         self.cb_a.move(30, 60)
         self.cb_a.setText('A')
 ​
         self.cb_b = QtWidgets.QCheckBox(self)    # 复选按钮 B
         self.cb_b.move(80, 60)
         self.cb_b.setText('B')
 ​
         self.cb_c = QtWidgets.QCheckBox(self)    # 复选按钮 C
         self.cb_c.setGeometry(130, 60, 50, 20)
         self.cb_c.setText('C')
 ​
         self.cb_d = QtWidgets.QCheckBox(self)    # 复选按钮 D
         self.cb_d.setGeometry(180, 60, 50, 20)
         self.cb_d.setText('D')
 ​
 if __name__ == '__main__':
     app = QtWidgets.QApplication(sys.argv)
     Form = MyWidget()
     Form.show()
     sys.exit(app.exec())

QCheckBox 状态设定

透过下列几种方法,可以设定 QCheckBox 的状态:

方法参数说明
设置已禁用()布尔是否停用,预设 False 启用,可设定 True 停用。
已检查过()布尔是否勾选,预设 False 不勾选,可设定 True 勾选,若同一组有多个勾选,则以最后一个为主。
切换开关勾选状态切换。

下面的程式码执行后,QCheckBox B 会停用,QCheckBox A 会预先勾选。

 from PyQt6 import QtWidgets
 import sys
 app = QtWidgets.QApplication(sys.argv)
 ​
 Form = QtWidgets.QWidget()
 Form.setWindowTitle('千牛编程思维')
 Form.resize(300, 200)
 ​
 cb_a = QtWidgets.QCheckBox(Form)    # 复选按钮 A
 cb_a.move(30, 60)
 cb_a.setText('A')
 cb_a.setChecked(True)               # 预设选取
 ​
 cb_b = QtWidgets.QCheckBox(Form)    # 复选按钮 B
 cb_b.move(80, 60)
 cb_b.setText('B')
 cb_b.setDisabled(True)              # 停用
 ​
 cb_c = QtWidgets.QCheckBox(Form)
 cb_c.setGeometry(130, 60, 50, 20)
 cb_c.setText('C')
 ​
 Form.show()
 sys.exit(app.exec())

class 写法:

 from PyQt6 import QtWidgets
 import sys
 ​
 class MyWidget(QtWidgets.QWidget):
     def __init__(self):
         super().__init__()
         self.setWindowTitle('千牛编程思维')
         self.resize(300, 200)
         self.ui()
 ​
     def ui(self):
         self.cb_a = QtWidgets.QCheckBox(self)    # 复选按钮 A
         self.cb_a.move(30, 60)
         self.cb_a.setText('A')
         self.cb_a.setChecked(True)               # 预设选取
 ​
         self.cb_b = QtWidgets.QCheckBox(self)    # 复选按钮 B
         self.cb_b.move(80, 60)
         self.cb_b.setText('B')
         self.cb_b.setDisabled(True)              # 停用
 ​
         self.cb_c = QtWidgets.QCheckBox(self)
         self.cb_c.setGeometry(130, 60, 50, 20)
         self.cb_c.setText('C')
 ​
 if __name__ == '__main__':
     app = QtWidgets.QApplication(sys.argv)
     Form = MyWidget()
     Form.show()
     sys.exit(app.exec())

QCheckBox 样式设定

如果会使用网页 CSS 语法,就能透过 setStyleSheet() 设定 QCheckBox 样式,在设计样式上也较为弹性好用,下方的程式码执行后,会套用 CSS 样式语法,将 QCheckBox 设定为蓝色字,当滑鼠移到按钮上,就会触发 hover 的样式而变成红色字,勾选之后就会变成黑底白字。

 from PyQt6 import QtWidgets
 import sys
 app = QtWidgets.QApplication(sys.argv)
 ​
 Form = QtWidgets.QWidget()
 Form.setWindowTitle('千牛编程思维')
 Form.resize(300, 200)
 ​
 # 設定 QCheckBox
 style = '''
     QCheckBox {
         color: #00f;
     }
     QCheckBox:hover {
         color: #f00;
     }
     QCheckBox:checked {
         color: #fff;
         background: #000;
     }
 '''
 ​
 cb_a = QtWidgets.QCheckBox(Form)
 cb_a.move(30, 60)
 cb_a.setText('A')
 cb_a.setStyleSheet(style)    # 套用 style
 ​
 cb_b = QtWidgets.QCheckBox(Form)
 cb_b.move(80, 60)
 cb_b.setText('B')
 cb_b.setStyleSheet(style)    # 套用 style
 ​
 cb_c = QtWidgets.QCheckBox(Form)
 cb_c.move(130, 60)
 cb_c.setText('C')
 cb_c.setStyleSheet(style)    # 套用 style
 ​
 Form.show()
 sys.exit(app.exec())

class 写法:

 from PyQt6 import QtWidgets
 import sys
 ​
 class MyWidget(QtWidgets.QWidget):
     def __init__(self):
         super().__init__()
         self.setWindowTitle('千牛编程思维')
         self.resize(300, 200)
         self.ui()
 ​
     def ui(self):
         # 設定 QCheckBox
         style = '''
             QCheckBox {
                 color: #00f;
             }
             QCheckBox:hover {
                 color: #f00;
             }
             QCheckBox:checked {
                 color: #fff;
                 background: #000;
             }
         '''
 ​
         self.cb_a = QtWidgets.QCheckBox(self)
         self.cb_a.move(30, 60)
         self.cb_a.setText('A')
         self.cb_a.setStyleSheet(style)    # 套用 style
 ​
         self.cb_b = QtWidgets.QCheckBox(self)
         self.cb_b.move(80, 60)
         self.cb_b.setText('B')
         self.cb_b.setStyleSheet(style)    # 套用 style
 ​
         self.cb_c = QtWidgets.QCheckBox(self)
         self.cb_c.move(130, 60)
         self.cb_c.setText('C')
         self.cb_c.setStyleSheet(style)    # 套用 style
 ​
 if __name__ == '__main__':
     app = QtWidgets.QApplication(sys.argv)
     Form = MyWidget()
     Form.show()
     sys.exit(app.exec())

QCheckBox 点击事件

如果要侦测勾选了哪个 QCheckBox,可以使用 clicked() 的方法,将函式与各个按钮绑定,接著就能透过 text() 取得按钮文字,透过 isChecked() 取得按钮勾选状态,下方的程式码执行后,勾选 QCheckBox 时,就会将勾选的按钮文字组合,透过 QLabel 输出显示。

from PyQt6 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)

Form = QtWidgets.QWidget()
Form.setWindowTitle('千牛编程思维')
Form.resize(300, 200)

arr = ['']*3                  # 用于存放文字
def show(cb, i):
    global a
    if cb.isChecked():
        arr[i] = cb.text()    
    else:
        arr[i] = ''           
    output = ''.join(arr)    
    label.setText(output)    

label = QtWidgets.QLabel(Form)
label.setGeometry(30, 30, 100, 30)

cb_a = QtWidgets.QCheckBox(Form)
cb_a.move(30, 60)
cb_a.setText('A')
cb_a.clicked.connect(lambda:show(cb_a, 0))  

cb_b = QtWidgets.QCheckBox(Form)
cb_b.move(80, 60)
cb_b.setText('B')
cb_b.clicked.connect(lambda:show(cb_b, 1))  

cb_c = QtWidgets.QCheckBox(Form)
cb_c.move(130, 60)
cb_c.setText('C')
cb_c.clicked.connect(lambda:show(cb_c, 2)) 

Form.show()
sys.exit(app.exec())

class 写法 ( 注意不能使用 show 作为方法名称,会覆写基类的 show 方法造成无法显示 ):

from PyQt6 import QtWidgets
import sys

class MyWidget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('千牛编程思维')
        self.resize(300, 200)
        self.ui()

    def ui(self):
        self.arr = ['']*3                   # 定义一个长度为3的空列表

        self.label = QtWidgets.QLabel(self)  # 创建一个QLabel控件
        self.label.setGeometry(30, 30, 100, 30)  # 设置QLabel控件的位置和大小

        self.cb_a = QtWidgets.QCheckBox(self)  # 创建一个QCheckBox控件
        self.cb_a.move(30, 60)                # 设置QCheckBox控件的位置
        self.cb_a.setText('A')                # 设置QCheckBox控件的文本
        self.cb_a.clicked.connect(lambda:self.showText(self.cb_a, 0))  

        self.cb_b = QtWidgets.QCheckBox(self)  # 创建一个QCheckBox控件
        self.cb_b.move(80, 60)                # 设置QCheckBox控件的位置
        self.cb_b.setText('B')                # 设置QCheckBox控件的文本
        self.cb_b.clicked.connect(lambda:self.showText(self.cb_b, 1))  

        self.cb_c = QtWidgets.QCheckBox(self)  # 创建一个QCheckBox控件
        self.cb_c.move(130, 60)               # 设置QCheckBox控件的位置
        self.cb_c.setText('C')                # 设置QCheckBox控件的文本
        self.cb_c.clicked.connect(lambda:self.showText(self.cb_c, 2))  
        
    # 定义一个showText方法,用于处理QCheckBox控件的点击事件
    def showText(self, cb, i):
        if cb.isChecked():                # 如果QCheckBox控件被选中
            self.arr[i] = cb.text()       # 将对应的文本添加到列表中
        else:
            self.arr[i] = ''              # 如果QCheckBox控件被取消选中,则将对应的列表元素置为空字符串
        output = ''.join(self.arr)         # 将列表中的元素合并为一个字符串
        self.label.setText(output)         # 将合并后的字符串设置为QLabel控件的文本   

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    Form = MyWidget()
    Form.show()
    sys.exit(app.exec())

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyQt5中的可按钮是一种常用的用户界面元素,也称为单按钮或者框,可以让用户在几个项之间进行择。在PyQt5中,可按钮可以通过QCheckBox和QRadioButton两种控件来实现。 QCheckBox是一个框控件,它可以让用户择多个项。可以使用setChecked()方法来设置框的状态,isChecked()方法来获取框的状态。以下是一个简单的示例: ```python from PyQt5.QtWidgets import QApplication, QWidget, QCheckBox, QVBoxLayout import sys class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): vbox = QVBoxLayout() cb = QCheckBox('Show title', self) cb.move(20, 20) cb.toggle() cb.stateChanged.connect(self.changeTitle) vbox.addWidget(cb) self.setLayout(vbox) 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_()) ``` QRadioButton是一个单按钮控件,它可以让用户在多个互斥的项之间进行择。可以使用setChecked()方法来设置单按钮的状态,isChecked()方法来获取单按钮的状态。以下是一个简单的示例: ```python from PyQt5.QtWidgets import QApplication, QWidget, QRadioButton, QVBoxLayout import sys class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): vbox = QVBoxLayout() rb1 = QRadioButton('Option 1', self) rb1.move(20, 20) rb1.setChecked(True) rb1.toggled.connect(self.onClicked) rb2 = QRadioButton('Option 2', self) rb2.move(20, 40) rb2.toggled.connect(self.onClicked) vbox.addWidget(rb1) vbox.addWidget(rb2) self.setLayout(vbox) self.setGeometry(300, 300, 250, 150) self.setWindowTitle('QRadioButton') self.show() def onClicked(self): radioButton = self.sender() if radioButton.isChecked(): print('Selected: ' + radioButton.text()) if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) ``` 以上示例展示了如何创建、设置和使用QCheckBox和QRadioButton控件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值