【发布时间】:2014-03-16 21:27:06
【问题描述】:
我试图创建一个用户友好的拖放 UI,我必须在其中可以拖放项目的区域 (QTreeWidgets)。有些项目根本无法拖动,有些可以拖动但只能拖动到某些项目上。
我已经设法通过在项目上存储拖动 True 或 False 变量来将项目设置为不被拖动,并在输入这样的 dragEnterEvent 时进行检查
class SpecialTreeWidget(QtGui.QTreeWidget):
def __init__(self, parent=None):
super(SpecialTreeWidget, self).__init__(parent)
def dragEnterEvent(self, event):
super(SpecialTreeWidget, self).dragEnterEvent(event)
mSenderItems = event.source().selectedItems()
for item in mSenderItems:
if not item.scriptMenuData["drag"]:
event.ignore()
break
else:
event.accept()
如果项目的 scriptMenuData["drag"] 设置为 False,则当我拖动时,会出现一个不可移动的图标。
现在的问题是做同样的事情,但是当我试图将一个项目放在某些项目上时。我最初的想法是在同一个班级这样做
def dragMoveEvent(self, event):
super(SpecialTreeWidget, self).dragMoveEvent(event)
mTargetItem = event.target()
if mTargetItem.scriptMenuData["drop"]:
event.accept()
else:
event.ignore()
但是没有 event.target(),除了 dropMimeData 方法之外,我找不到任何方法来获取目标,但为时已晚,我想要在移动时显示“你不能放在这里”图标物品,而不是掉落时。
关于如何获取目标的任何建议,有没有办法获取鼠标下的小部件,或者我可以使用另一个事件/方法/信号?
提前致谢。
/克里斯蒂安·M
【问题讨论】:
标签: python drag-and-drop pyside