Pyside6—QListWidget中添加复选框及其信号传递

2 篇文章 0 订阅

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())

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在PySide6的QTreeView添加复选框,需要使用QStandardItemModel和QStandardItem类来创建模型和项。然后,将复选框添加到项并将项添加到模型。 以下是一个示例代码,展示如何在QTreeView添加复选框: ```python from PySide6.QtCore import Qt from PySide6.QtGui import QStandardItemModel, QStandardItem from PySide6.QtWidgets import QApplication, QMainWindow, QTreeView class MainWindow(QMainWindow): def __init__(self): super().__init__() # Create the model and set column headers model = QStandardItemModel() model.setHorizontalHeaderLabels(['Name', 'Checked']) # Create some items with checkboxes item1 = QStandardItem('Item 1') item1.setCheckable(True) item2 = QStandardItem('Item 2') item2.setCheckable(True) # Add the items to the model model.appendRow([item1, QStandardItem()]) model.appendRow([item2, QStandardItem()]) # Create the tree view and set the model tree_view = QTreeView() tree_view.setModel(model) # Set the checkbox column to be editable tree_view.setItemDelegateForColumn(1, tree_view.itemDelegateForColumn(0)) # Add the tree view to the main window self.setCentralWidget(tree_view) if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() app.exec() ``` 在这个例子,我们创建了一个QStandardItemModel,然后创建两个带有复选框的QStandardItem。我们将这些项添加到模型,并将模型设置为QTreeView的模型。最后,我们使用setItemDelegateForColumn方法将复选框列设置为可编辑的,并将QTreeView添加到主窗口

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值