Python QTreeWidget中的拖放操作未复制已删除的项
我想通过拖放鼠标操作从Python QTreeWidget中的拖放操作未复制已删除的项,python,pyqt,drag-and-drop,pyqt5,qtreewidget,Python,Pyqt,Drag And Drop,Pyqt5,Qtreewidget,我想通过拖放鼠标操作从QTreeWidget-父项下的另一个父项下复制一个项目。 为此,我实现了dropEvent(),并将dropAction设置为Qt.CopyAction。 但无论如何,我正在删除的项不会复制到新父项下。 例如->在组“LON”下拖动用户“schmidt” 预期行为:我正在删除的项正在新父项下复制。(例如,用户“schmidt”将添加到组“LON”下) 完整工作代码示例: #!/usr/bin/env python3 # coding = utf-8 import sys
QTreeWidget
-父项下的另一个父项下复制一个项目。
为此,我实现了dropEvent()
,并将dropAction
设置为Qt.CopyAction
。
但无论如何,我正在删除的项不会复制到新父项下。
例如->在组“LON”下拖动用户“schmidt”
预期行为:我正在删除的项正在新父项下复制。(例如,用户“schmidt”将添加到组“LON”下)
完整工作代码示例:
#!/usr/bin/env python3
# coding = utf-8
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class MyTreeWidget(QtWidgets.QTreeWidget):
def __init__(self):
QtWidgets.QTreeView.__init__(self)
self.setSelectionMode(self.SingleSelection)
self.setDragDropMode(QtWidgets.QAbstractItemView.DragDrop)
self.setDragEnabled(True)
self.setAcceptDrops(True)
self.setDropIndicatorShown(True)
def dropEvent(self, event):
event.setDropAction(QtCore.Qt.CopyAction)
event.accept()
class MyMainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MyMainWindow, self).__init__(parent)
self.tree = MyTreeWidget()
self.tree.setRootIsDecorated(True)
self.tree.setHeaderHidden(True)
self.setCentralWidget(self.tree)
itemUsers = QtWidgets.QTreeWidgetItem(self.tree, ["User"])
itemUsers.addChild(QtWidgets.QTreeWidgetItem(itemUsers, ["schmidt"]))
itemUsers.addChild(QtWidgets.QTreeWidgetItem(itemUsers, ["weber"]))
itemMdt = QtWidgets.QTreeWidgetItem(self.tree, ["Group"])
itemMdt.addChild(QtWidgets.QTreeWidgetItem(itemMdt, ["FFM"]))
itemMdt.addChild(QtWidgets.QTreeWidgetItem(itemMdt, ["LON"]))
itemMdt.addChild(QtWidgets.QTreeWidgetItem(itemMdt, ["NY"]))
self.show()
self.setGeometry(400, 400, 400, 400)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
ui = MyMainWindow()
sys.exit(app.exec_())
删除dropEvent方法 TL;博士强>
无需重写dropEvent方法,因为它已经实现了复制项的所有逻辑。删除dropEvent方法 TL;博士强>
无需重写dropEvent方法,因为它已经实现了复制项目的所有逻辑。谢谢。我该如何实现一个验证,证明该项已经存在于新的父项下,如果是这种情况,则跳过它?@ProfP30您可以覆盖dropEvent方法并调用super(),如果它有效:
def dropEvent(self,event):if validation\u函数(event):super()。dropEvent(event)
谢谢!我如何评估丢失的数据(例如,删除的QTreeWidgetItem的文本。源参数仅包含QTreeWidgets名称。我如何迭代所有新的父级现有子级以与前者进行比较。我想检查删除的项是否已作为新父级的子级存在。@ProfP30然后获取事件的mimedata信息,例如创建一个伪_模型(作为此解决方案中的一个实现:)并获取该项。谢谢。通过super()插入此新插入的项后,如何设置其图标。dropEvent(事件)
?谢谢。我该如何验证该项在新父项下已经存在,如果是这种情况,则跳过它?@ProfP30您可以重写dropEvent方法并调用super(),如果它有效:def dropEvent(self,event):if validation_函数(event):super()。dropEvent(event)
谢谢!我如何评估丢弃的数据(例如,删除的QTreeWidgetItem的文本。源参数仅包含QTreeWidgets名称。我如何迭代所有新的父级现有子级以与前者进行比较。我想检查删除的项是否已作为新父级的子级存在。@ProfP30然后获取事件的mimedata信息,例如创建一个伪_模型(作为此解决方案中的一个实现:)并获取该项目。谢谢。在通过super()插入新插入的项目后,如何设置该项目的图标。dropEvent(event)
?