PyQt5中的QListWidget的拖拽事件设置,双击可编辑设置,以及一个垃圾桶的实现

MyQListWidget

QListWidget中的要支持拖拽添加和删除item项,则需要继承实现几个方法。
这是我自己写的一个支持双击编辑、拖拽添加文件,拖拽删除的子类。拖拽删除的实现借助了另一个控件。

# listwidget.pyw
from typing import Optional
from PyQt5.QtWidgets import QListWidget, QWidget, QAbstractItemView, QListWidgetItem
from PyQt5.QtGui import QDragEnterEvent, QDropEvent, QDragMoveEvent, QKeyEvent
from PyQt5.QtCore import Qt, QModelIndex


class MyListWidget(QListWidget):
    """支持拖拽的QListWidget"""
    def __init__(self, parent: Optional[QWidget]=None) -> None:
        super().__init__(parent)
        # 拖拽设置
        self.setAcceptDrops(True)
        self.setDragEnabled(True)
        self.setDragDropMode(QAbstractItemView.DragDrop)            # 设置拖放
        self.setSelectionMode(QAbstractItemView.ExtendedSelection)  # 设置选择多个
        self.setDefaultDropAction(Qt.CopyAction)
        # 双击可编辑
        self.edited_item = self.currentItem()
        self.close_flag = True
        self.doubleClicked.connect(self.item_double_clicked)
        self.currentItemChanged.connect(self.close_edit)
    
    def keyPressEvent(self, e
  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
QListWidgetPyQt5的控件之一,它可以用于显示一个项目列表,并且允许用户通过单击列表一个项目来选它。以下是一个简单的示例程序,它演示了如何使用QListWidget: ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QListWidget, QVBoxLayout class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): vbox = QVBoxLayout() listWidget = QListWidget() vbox.addWidget(listWidget) for i in range(10): item = 'Item %d' % i listWidget.addItem(item) self.setLayout(vbox) self.setGeometry(300, 300, 250, 150) self.setWindowTitle('QListWidget Example') self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) ``` 在该程序,我们创建了一个QListWidget对象,然后通过循环将10个项目添加到列表。最后,我们将QListWidget添加到QVBoxLayout,并将其设置为应用程序的主窗口的布局。 当用户单击列表的项目时,可以通过调用QListWidget.currentItem()方法来获取当前选的项目。例如,以下代码演示如何在用户单击列表的项目时将其文本打印到控制台: ```python listWidget.currentItemChanged.connect(self.onCurrentItemChanged) ... def onCurrentItemChanged(self, current, previous): if current is not None: print(current.text()) ``` 在这个示例,我们使用QListWidget.currentItemChanged()信号连接了一个槽函数onCurrentItemChanged()。当用户单击列表的项目时,该信号将被发出,并将当前选的项目和以前选的项目作为参数传递给槽函数。在槽函数,我们检查当前项目是否为None,并打印其文本。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值