PySide如何在保本的情况下获得目标

2024-09-30 10:33:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个用户友好的拖放界面,在那里我可以拖放项目(QTreeWidgets)。有些项目根本无法拖动,有些项目只能拖动到某些项目上。在

通过在item上存储一个drag 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,则会出现一个不可移动的图标。在

现在的问题是做同样的事情,但是当我试图将一个项目放到某些项目上时。我最初的想法是在同一个班上这样做

^{pr2}$

但是没有事件.目标()除dropMimeData方法外,我找不到任何方法来获取目标,但这已经很晚了,我希望在移动项目时显示“你不能在此处放置”图标,而不是在它被删除时。在

关于如何获取目标有什么建议吗?有没有一种方法可以获取鼠标下的小部件?也许还有其他事件/方法/信号可以使用?在

提前谢谢。在

/克里斯蒂安·M


Tags: 项目方法selfeventfalse目标initdef
2条回答

在PySide2中,您可以通过这个获得目标事件。在

from PySide2 import QtWidgets
from PySide2 import QtCore

class MyTreeWidget(QtWidgets.QTreeWidget):
def __init__(self, parent=None):
    super(MyTreeWidget, self).__init__(parent)
    self.setAcceptDrops(True)
    self.setDragDropMode(QtWidgets.QAbstractItemView.DropOnly)
    self.setDefaultDropAction(QtCore.Qt.CopyAction)
    self.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)


def dropEvent(self, event):
    item = self.itemAt(event.pos())
    print(item.text(0))

所以我设法找到了一个解决方案,你可以抓住哪个项目是在一个点以下QTreeWidget.itemAt() 代码是这样的

def dragMoveEvent(self, event):
        super(SpecialTreeWidget, self).dragMoveEvent(event)
        mDropItem = self.itemAt(event.pos())
        if mDropItem:
            if mDropItem.scriptMenuData["drop"]:
                event.accept()
            else:
                event.ignore()
        else:
            event.accept()

相关问题 更多 >

    热门问题