为什么将文本从QLineEdit拖放到QPushButton可以工作,而不能拖到QTreeWidget



我试图从这个 PyQt5 示例中学到一些东西。您可以选择QLineEdit的文本,将其拖放到QPushButton上以重命名按钮。这效果很好。

但我也想使用 QTreeWidget 作为投放目标。所选文本应该重置标题标签,而不是重命名按钮。所以我调整了代码以适应QTreeWidget.但是,将文本拖到QTreeWidget上时,它甚至不显示"放下鼠标光标"。

怎么了?

这是完整的代码,它被简化为基本代码:它显示了QTreeWidget的问题,同时使用QPushButton工作正常:

import sys
from PyQt5.QtWidgets import QTreeWidget, QPushButton, QWidget, QLineEdit, QApplication
class Tree(QTreeWidget):
    def __init__(self, parent):
        super().__init__(parent)
        self.setAcceptDrops(True)

    def dragEnterEvent(self, e):
        if e.mimeData().hasFormat('text/plain'):
            e.accept()
        else:
            e.ignore() 
    def dropEvent(self, e):
        self.setHeaderLabel(e.mimeData().text()) 

class Button(QPushButton):
    def __init__(self, title, parent):
        super().__init__(title, parent)
        self.setAcceptDrops(True)

    def dragEnterEvent(self, e):
        if e.mimeData().hasFormat('text/plain'):
            e.accept()
        else:
            e.ignore() 
    def dropEvent(self, e):
        self.setText(e.mimeData().text()) 

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        edit = QLineEdit('', self)
        edit.setDragEnabled(True)
        edit.move(30, 65)
        tree = Tree(self)
        tree.move(190, 65)
        button = Button("Button", self)
        button.move(30, 120)
        self.setWindowTitle('Simple drag & drop')
        self.setGeometry(200, 200, 500, 400)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    app.exec_()

您应该以与dragEnterEvent()相同的方式重新实现dragMoveEvent()。默认实现可以忽略该事件,具体取决于鼠标光标下的项。

相关内容

  • 没有找到相关文章

最新更新