PyQt5-QWidgets-QListWidget和QListWidgetItem和QCheckBox

一、列表视图

import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QListWidget,
                             QListWidgetItem, QMenu, QInputDialog)
from PyQt5.QtCore import Qt


class CustomWidget(QWidget):
    def __init__(self, parent=None):
        super(CustomWidget, self).__init__(parent)

        self.layout = QVBoxLayout(self)
        self.listWidget = QListWidget(self)
        self.layout.addWidget(self.listWidget)
        self.setLayout(self.layout)

        # 为示例添加一些项目
        for i in range(10):
            item = QListWidgetItem(f"Item {i}")
            self.listWidget.addItem(item)

        # 常用的`QListWidget`连接:
		1. `itemClicked`:当用户单击列表项时触发的信号。
		list_widget.itemClicked.connect(item_clicked_handler)
		
		2. `itemDoubleClicked`:当用户双击列表项时触发的信号。
		list_widget.itemDoubleClicked.connect(item_double_clicked_handler)
		
		3. `currentItemChanged`:当当前选中的列表项发生变化时触发的信号。
		list_widget.currentItemChanged.connect(current_item_changed_handler)
		
		4. `itemSelectionChanged`:当列表项的选择状态发生变化时触发的信号。
		list_widget.itemSelectionChanged.connect(item_selection_changed_handler)
		
		5. `itemActivated`:当用户激活(例如按下回车键)列表项时触发的信号。
		list_widget.itemActivated.connect(item_activated_handler)
		
		6. `itemEntered`:当鼠标进入列表项时触发的信号。
		list_widget.itemEntered.connect(item_entered_handler)

		以上是一些常用的`QListWidget`连接,你可以根据需要选择适合的连接,并编写对应的处理函数来处理相关事件。
        self.listWidget.itemClicked.connect(self.handleItemClicked)
        self.listWidget.setContextMenuPolicy(Qt.CustomContextMenu)
        self.listWidget.customContextMenuRequested.connect(self.showContextMenu)
		
    def showContextMenu(self, position):
        item = self.listWidget.itemAt(position)
        if item:
            menu = QMenu(self.listWidget)

            # 添加删除操作
            delete_action = menu.addAction("Delete")
            delete_action.triggered.connect(lambda: self.listWidget.takeItem(self.listWidget.row(item)))

            # 添加修改操作
            modify_action = menu.addAction("Modify")
            modify_action.triggered.connect(lambda: self.modifyItem(item))

            # 显示上下文菜单
            menu.exec_(self.listWidget.mapToGlobal(position))

    def modifyItem(self, item):
        # 弹出一个对话框以获得新的文本
        text, ok = QInputDialog.getText(self, 'Modify item', 'Enter new text:',
                                        text=item.text())
        if ok:
            item.setText(text)

    def handleItemClicked(self, item):
        print(f"You clicked on: {item.text()}")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = CustomWidget()
    window.show()
    sys.exit(app.exec_())

二、复选框

import sys
from PyQt5.QtWidgets import QApplication, QListWidget, QListWidgetItem
from PyQt5.QtCore import Qt


class CustomListWidget(QListWidget):
    def __init__(self, parent=None):
        super(CustomListWidget, self).__init__(parent)

        # 连接 itemChanged 信号到槽函数
        self.itemChanged.connect(self.handleItemChanged)

        # 为示例添加一些项目
        for i in range(10):
            label_name = f"Item {i}"
            item = QListWidgetItem(label_name)
            # Qt.Checked	2	组件没有被选中(默认)
			# Qt.PartiallyChecked	1	组件被半选中
			# Qt.Unchecked	0	组件被选中
            item.setCheckState(Qt.Unchecked)  # 设置为未选中状态
            self.addItem(item)

    def handleItemChanged(self, item):
        # 检查复选框状态并执行相应的功能
        if item.checkState() == Qt.Checked:
            print(f"Item '{item.text()}' was checked.")
            # 你可以在这里添加其他功能
        elif item.checkState() == Qt.Unchecked:
            print(f"Item '{item.text()}' was unchecked.")
            # 你也可以在这里添加其他功能


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = CustomListWidget()
    window.show()
    sys.exit(app.exec_())

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值