1、QListWidget设置复选框
list_widget = QListWidget()
# 创建列表item
item = QListWidgetItem()
# 创建复选框
check_box = QCheckBox("点我")
# 为列表添加item和复选框
list_widget.addItem(item)
list_widget.setItemWidget(item, check_box)
2、复选框信号传递
2.1 信号StateChange(int)
StateChange()是复选框状态改变信号,默认传递一个int参数,选中时为2,取消选中时为0
# 绑定信号与槽函数
check_box.StateChange.conncet(on_check_box_state_change)
# 定义槽函数,接收默认参数
def on_check_box_state_change(state):
print(state)
2.2 信号CheckStateChange(Qt.CheckState)
CheckStateChange()也是复选框状态改变信号,默认传递一个Qt.CheckState参数,选中时为CheckState.Checked,取消选中时为CheckState.Unchecked
# 绑定信号与槽函数
check_box.CheckStateChange.conncet(on_check_box_state_change)
# 定义槽函数,接收默认参数
def on_check_box_state_change(state):
print(state)
3、示例代码
from PySide6.QtWidgets import QApplication, QWidget, QListWidget, QListWidgetItem, QCheckBox, QVBoxLayout
import sys
# 定义一个名为CheckBoxTest的QWidget类,用于演示QCheckBox和QListWidget的结合使用
class CheckBoxTest(QWidget):
def __init__(self, parent=None):
super(CheckBoxTest, self).__init__(parent)
self.init_checkbox()
def init_checkbox(self):
# 创建一个QListWidget对象
self.list_widget = QListWidget()
for i in range(10):
item = QListWidgetItem(self.list_widget)
'''
上式为简写,等价于下面的2行代码:
item = QListWidgetItem()
self.list_widget.addItem(item)
'''
checkbox = QCheckBox(f"按钮{i}")
# 设置列表项的高度以适应复选框的大小
item.setSizeHint(checkbox.sizeHint())
self.list_widget.setItemWidget(item, checkbox)
# 连接复选框状态改变的信号到对应的槽函数
checkbox.stateChanged.connect(self.on_checkbox_state_changed)
# 创建一个垂直布局,并将QListWidget添加到布局中
layout = QVBoxLayout(self)
layout.addWidget(self.list_widget)
# 设置窗口的布局
self.setLayout(layout)
def on_checkbox_state_changed(self, state):
"""
处理复选框状态改变的槽函数
:param state: 复选框的新状态,为Qt.Checked或Qt.Unchecked
"""
item_list = []
for i in range(self.list_widget.count()):
item = self.list_widget.item(i)
checkbox = self.list_widget.itemWidget(item)
# 如果复选框被选中,则将其文本添加到item_list中
if checkbox.isChecked():
item_list.append(checkbox.text())
# 打印被选中的复选框的文本
print(state)
print(item_list)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = CheckBoxTest()
window.show()
sys.exit(app.exec())