✨✨ 欢迎大家来到景天科技苑✨✨
???????? 养成好习惯,先赞后看哦~????????
???? 作者简介:景天科技苑
????《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,****全栈领域优质创作者,掘金优秀博主,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
信号。这个信号可以被连接到一个槽函数,以执行特定的操作。
基本使用方法
导入必要的模块
首先,需要从模块中导入
QCheckBox
、QApplication
和QWidget
等必要的类和函数。
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() # 切换选中状态
绑定事件
QCheckBox
的stateChanged
信号可以绑定到一个槽函数上,以便在状态改变时执行特定的操作。
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,然后点击 获取选中项
注意:在上面的示例中,我假设MyMultiSelectWidget
的initUI
方法中已经创建了一个布局(如QVBoxLayout
),并且这个布局被存储为类的实例变量(例如)。然而,在提供的代码中,我直接在
initUI
方法中使用了局部变量layout
。为了将按钮添加到布局中,你应该将layout
设置为类的实例变量,或者在需要时重新获取它(例如,通过()
方法,如果你有这样的方法的话)。但是,在这个简单的示例中,为了保持代码的清晰和简短,我将按钮直接添加到了已经存在的layout
中,这在实际应用中可能需要你稍作调整。
另外,请注意,上面的代码示例中添加了一个全选按钮、一个取消全选按钮和一个获取选中项的按钮,以便用户可以通过图形界面与多选控件进行交互。这些按钮的点击事件分别连接到了checkAll
、uncheckAll
和getSelectedOptions
方法上,这些方法分别用于全选所有选项、取消全选所有选项和获取当前选中的选项列表。
案例二:三态支持的应用
在某些特殊情况下,你可能需要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
控件和信号槽机制,你可以轻松地实现复杂的用户交互功能。