Python PyQt5 : QListWidget doesn't accept drops

标签 python drag-and-drop qt5 pyqt5 qlistwidget

我尝试创建一个简单的 QListWidget,它接受放入其中的文本。无法让它工作。放置事件甚至不会被触发,而拖动事件则相反。 有人能指出我正确的方向吗?我做错了什么?

提前致谢。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton,  QLineEdit, QLabel, QListWidget
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot

class App(QWidget):

    def __init__(self):
        super().__init__()
        self.title = 'PyQt5 drag and drop'
        self.left = 500
        self.top = 400
        self.width = 400
        self.height = 250
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        editBox = QLineEdit('Drag this', self)
        editBox.setDragEnabled(True)
        editBox.move(10, 10)
        editBox.resize(100,32)

        listwidget = CustomLabel(self)
        listwidget.move(130,15)

        self.show()


class CustomLabel(QListWidget):

    def __init__(self, parent):
        super().__init__(parent)
        self.setAcceptDrops(True)

    def dragEnterEvent(self, e):
        if e.mimeData().hasFormat('text/plain'):
            print("dragged")
            e.accept()
        else:
            e.ignore()


    def dropEvent(self, e):
        print("dropped")

        self.addItem(event.mimeData().text())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

最佳答案

默认情况下,QListWidget 不处理删除的文本,因此您必须重新实现 mime 数据处理,如下所示:

class CustomLabel(QListWidget):    
    def __init__(self, parent):
        super().__init__(parent)
        self.setAcceptDrops(True)

    def mimeTypes(self):
        mimetypes = super().mimeTypes()
        mimetypes.append('text/plain')
        return mimetypes

    def dropMimeData(self, index, data, action):
        if data.hasText():
            self.addItem(data.text())
            return True
        else:
            return super().dropMimeData(index, data, action)

关于Python PyQt5 : QListWidget doesn't accept drops,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42838419/

相关文章:

javascript - 通过拖放附加文件时 FormData 发送空白文件字段

c++ - 从qt进度条中删除文本

c++ - 通过 Qt NamedPipe 发送数据时追加数据

按第一个分组的元组列表中元组的第二个和第三个元素的 Python 总和

ios - UIControlEventTouchDragExit 在距 UIButton 100 像素时触发

angular - 如何使用 Angular 拖放从放置部分删除预览显示?

c++ - Qt5 应用程序不会在 Ubuntu 上绘制任何窗口

python - 裁剪适合文件后坐标不保存

python - np.random.choice 在直方图中有一个缺口

python - 值错误: could not convert string to float: 'lisans' in Python