【python】PyQt5中多选按钮QCheckBox的详细用法教程与实战案例

时间:2024-11-18 17:43:57

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

???????? 养成好习惯,先赞后看哦~????????

???? 作者简介:景天科技苑
????《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,****全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
????《博客》:Python全栈,前后端开发,小程序开发,云原生K8S,人工智能,js逆向,App逆向,网络系统安全,数据分析,PyQt5和tkinter桌面开发,Django,fastapi,flask等框架,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:PyQt5桌面应用开发,零基础到进阶应用实战
景天的主页:景天科技苑

在这里插入图片描述

文章目录

  • PyQt5中多选按钮QCheckBox的详细用法教程
    • 引言
    • QCheckBox控件的基本属性
      • 控件显示的文本
      • 是否处于选中状态
      • 三态支持
      • 状态改变信号
    • 基本使用方法
      • 导入必要的模块
      • 创建一个简单的QCheckBox
      • 设置默认选中状态
      • 切换选中状态
      • 绑定事件
    • 实际应用案例
      • 案例一:多选功能
      • 案例二:三态支持的应用
    • 总结

PyQt5中多选按钮QCheckBox的详细用法教程

引言

PyQt5 是一个跨平台的GUI(图形用户界面)工具包,用于Python编程语言。它基于Qt库,提供了丰富的控件和功能,使得开发人员能够轻松创建复杂的桌面应用程序。在PyQt5中,QCheckBox控件用于实现多选按钮,允许用户从一组选项中选择一个或多个选项。本文将结合实际案例,详细介绍QCheckBox控件在PyQt5中的使用方法。

QCheckBox控件的基本属性

在这里插入图片描述

控件显示的文本

QCheckBox控件的文本通过其构造函数传入,用于显示给用户看的选项描述。例如:

checkbox = QCheckBox('选项1', self)

是否处于选中状态

QCheckBox控件有一个checked属性,表示控件当前是否被选中。此属性为布尔类型,True表示已选中,False表示未选中。

三态支持

默认情况下,QCheckBox控件只支持两种状态:选中(checked)和未选中(unchecked)。但是,通过设置tristate属性为True,可以让QCheckBox支持三种状态:选中(checked)、半选中(partially checked)和未选中(unchecked)。这在某些情况下非常有用,比如表示部分完成或不确定的状态。
在这里插入图片描述

#设置支持三态
(True)

设置支持三态以后,点一些并未选中
在这里插入图片描述

再点一下才是选中
在这里插入图片描述

状态改变信号

QCheckBox控件在状态改变时会发出stateChanged信号。这个信号可以被连接到一个槽函数,以执行特定的操作。

基本使用方法

导入必要的模块

首先,需要从模块中导入QCheckBoxQApplicationQWidget等必要的类和函数。

from PyQt5.QtWidgets import QApplication, QWidget, QCheckBox

创建一个简单的QCheckBox

接下来,创建一个QWidget作为主窗口,并在其中添加一个QCheckBox控件。

from PyQt5.QtWidgets import QApplication, QWidget, QCheckBox
import sys
class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('QCheckBox 示例')
        self.setGeometry(100, 100, 200, 100)  # 设置窗口位置和大小
        self.checkbox = QCheckBox('选项1', self)
        self.checkbox.move(50, 20)  # 设置QCheckBox的位置

if __name__ == '__main__':
    app = QApplication([])
    w = MyWidget()
    w.show()
    sys.exit(app.exec_())

这段代码创建了一个包含单个QCheckBox的简单窗口。
在这里插入图片描述

设置默认选中状态

可以通过调用setChecked(True)setChecked(False)方法来设置QCheckBox的默认选中状态。

self.checkbox.setChecked(True)  # 默认选中

切换选中状态

toggle()方法用于切换QCheckBox的选中状态。如果控件当前是未选中的,调用toggle()后它会变为选中状态;如果控件当前是选中的,调用toggle()后它会变为未选中状态。

self.checkbox.toggle()  # 切换选中状态

绑定事件

QCheckBoxstateChanged信号可以绑定到一个槽函数上,以便在状态改变时执行特定的操作。

def checkboxChanged(self, state):
    if state == Qt.Checked:
        print("选项1被选中")
    elif state == Qt.Unchecked:
        print("选项1未被选中")

# 绑定信号和槽
self.checkbox.stateChanged.connect(self.checkboxChanged)

注意,这里的stateChanged信号传递的是枚举值(),而不是布尔值。

实际应用案例

案例一:多选功能

在很多应用程序中,需要用户从一组选项中选择多个选项。这时,可以使用多个QCheckBox控件来实现。

from PyQt5.QtWidgets import QWidget, QCheckBox
class MyMultiSelectWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('多选示例')
        self.setGeometry(100, 100, 300, 200)
        
        layout = QVBoxLayout(self)  # 使用垂直布局管理器

        self.checkbox1 = QCheckBox('选项1', self)
        self.checkbox2 = QCheckBox('选项2', self)
        self.checkbox3 = QCheckBox('选项3', self)

        layout.addWidget(self.checkbox1)
        layout.addWidget(self.checkbox2)
        layout.addWidget(self.checkbox3)

        # 可以在这里添加按钮或其他控件来触发选项的检查或处理

    def checkAll(self):
        # 选中所有选项
        self.checkbox1.setChecked(True)
        self.checkbox2.setChecked(True)
        self.checkbox3.setChecked(True)

    def uncheckAll(self):
        # 取消选中所有选项
        self.checkbox1.setChecked(False)
        self.checkbox2.setChecked(False)
        self.checkbox3.setChecked(False)

    def getSelectedOptions(self):
        # 获取所有选中的选项
        selected_options = []
        if self.checkbox1.isChecked():
            selected_options.append('选项1')
        if self.checkbox2.isChecked():
            selected_options.append('选项2')
        if self.checkbox3.isChecked():
            selected_options.append('选项3')
        return selected_options

if __name__ == '__main__':
    import sys
    from PyQt5.QtWidgets import QApplication, QPushButton, QVBoxLayout
    from PyQt5.QtCore import Qt

    app = QApplication(sys.argv)
    widget = MyMultiSelectWidget()

    # 添加一个按钮来触发获取选中选项的操作
    button = QPushButton('获取选中项', widget)
    button.clicked.connect(lambda: print(widget.getSelectedOptions()))

    # 如果需要,也可以添加全选和取消全选的按钮
    all_button = QPushButton('全选', widget)
    all_button.clicked.connect(widget.checkAll)

    uncheck_button = QPushButton('取消全选', widget)
    uncheck_button.clicked.connect(widget.uncheckAll)

    # 布局调整,将按钮添加到界面中
    layout = widget.layout()  # 假设MyMultiSelectWidget的initUI中设置了layout
    layout.addWidget(button)
    layout.addWidget(all_button)
    layout.addWidget(uncheck_button)

    widget.show()
    sys.exit(app.exec_())

选中2,然后点击 获取选中项
在这里插入图片描述

注意:在上面的示例中,我假设MyMultiSelectWidgetinitUI方法中已经创建了一个布局(如QVBoxLayout),并且这个布局被存储为类的实例变量(例如)。然而,在提供的代码中,我直接在initUI方法中使用了局部变量layout。为了将按钮添加到布局中,你应该将layout设置为类的实例变量,或者在需要时重新获取它(例如,通过()方法,如果你有这样的方法的话)。但是,在这个简单的示例中,为了保持代码的清晰和简短,我将按钮直接添加到了已经存在的layout中,这在实际应用中可能需要你稍作调整。

另外,请注意,上面的代码示例中添加了一个全选按钮、一个取消全选按钮和一个获取选中项的按钮,以便用户可以通过图形界面与多选控件进行交互。这些按钮的点击事件分别连接到了checkAlluncheckAllgetSelectedOptions方法上,这些方法分别用于全选所有选项、取消全选所有选项和获取当前选中的选项列表。

案例二:三态支持的应用

在某些特殊情况下,你可能需要QCheckBox控件支持三态(选中、未选中、半选中)。这可以通过设置tristate属性为True来实现。


# 0. 导入需要的包和模块
from PyQt5.Qt import *  # 主要包含了我们常用的一些类, 汇总到了一块
import sys


# 1. 创建一个应用程序对象
app = QApplication(sys.argv)


# 2. 控件的操作
# 2.1 创建控件
window = QWidget()


# 2.2 设置控件
#设置窗口标题,默认标题是python,只有*控件才可以设置标题栏的标题
window.setWindowTitle("QCheckBox功能测试")
#设置窗口大小,注意,设置的空间尺寸大小,不包含上面的标题栏
window.resize(500, 500)

#创建多选框,加上快捷键,标题,父控件
cb = QCheckBox("&Python", window)
#设置图标
cb.setIcon(QIcon("../../imgs/"))
#设置图标大小
cb.setIconSize(QSize(60, 60))



cp = QCheckBox("&C++", window)


#复选框三态支持
#支持三态,需要设置下 setTristate(bool=True)
# 未选中  0
# 部分选中  1
# 真的被选中  2

#查看是否设置了三态 isTristate()

#设置支持三态
# (True)

#查看是否支持三态
print(cp.isTristate())

#三态中,设置选中状态
cp.setCheckState(Qt.PartiallyChecked)

#查看选中状态
print("选中状态",cp.checkState())
# 2.3 展示控件
window.show()



# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())


可以看到c++处于部分选中状态
在这里插入图片描述

总结

总之,QCheckBox是PyQt5中一个非常有用的控件,它允许用户从一组选项中选择一个或多个选项。通过结合使用多个QCheckBox控件和信号槽机制,你可以轻松地实现复杂的用户交互功能。