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
    评论
您可以使用QSS(Qt样式表)来设置QCheckBox的勾选框和勾选标记的颜色。以下是一些示例代码,您可以将其添加到应用程序的样式表中: ``` QCheckBox::indicator { border: 2px solid #bdc3c7; width: 15px; height: 15px; } QCheckBox::indicator:checked { background-color: #2ecc71; border-color: #2ecc71; color: black; } QCheckBox::indicator:checked:disabled { background-color: #7f8c8d; border-color: #7f8c8d; color: black; } QCheckBox::indicator:unchecked { background-color: white; border-color: black; } ``` 其中,`::indicator`选择器用于设置勾选框的外观,`::indicator:checked`选择器用于设置勾选标记的外观。在上面的代码中,勾选框的颜色为灰色(`#bdc3c7`),勾选标记的颜色为绿色(`#2ecc71`),未勾选的勾选框使用白色背景和黑色边框,勾选的勾选框使用绿色背景和黑色的勾选标记。您可以根据自己的需求调整此样式表。 请注意,如果您将样式表应用于应用程序中的所有QCheckBox,则上述样式表将为所有QCheckBox设置相同的外观。如果您只想为单个QCheckBox设置样式表,则可以使用该QCheckBox的setStyleSheet()函数。例如: ``` QCheckBox *checkBox = new QCheckBox("My Checkbox"); checkBox->setStyleSheet("QCheckBox::indicator:checked { background-color: #2ecc71; border-color: #2ecc71; color: black; } QCheckBox::indicator:unchecked { background-color: white; border-color: black; }"); ``` 这将为名为“ My Checkbox”的QCheckBox设置不同的勾选框和勾选标记颜色。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值