如何在pyqt中的QtableWidget中捕获drop事件

时间:2015-05-12 01:55:08

标签: python drag-and-drop pyqt pyqt4 qtablewidget

我有一个窗口,其中包含使用Qt Designer设计的3个表格小部件。

表1.显示存在的组

表2.显示所有员工(Drag Enabled setto True)

表3.显示所选组中的员工(AcceptDrops设置为True)

我想在表3中捕获drop事件,即在执行drop之后我想运行一个函数。同时它应该避免重复。

我设置了eventfilters

Table3.installEventFilter(self)

但无法捕捉跌落事件。

我的eventfilter def如下所示

def eventFilter(self, object, event):
    if (object is self.TBLW_GroupMembers):
        if (event.type() == QtCore.QEvent.DragEnter):
            if event.mimeData().hasUrls():
                event.accept()   # must accept the dragEnterEvent or else the dropEvent can't occur !!!
                print "accept"
            else:
                event.ignore()
                print "ignore"
        if (event.type() == QtCore.QEvent.Drop):
            print 'drop'
        return False # lets the event continue to the edit
    return False

我已按照此Thread

发布的此流程进行操作

能够抓住DragEnter而不是Drop

1 个答案:

答案 0 :(得分:0)

我相信你还需要处理(和接受)QtCore.QEvent.DragMove事件。您可能还应该为DragLeave添加处理程序,但我认为这不太重要。

不幸的是,这个要求似乎没有得到很好的记录,但是当我实施拖放时,我发现了类似的行为。就个人而言,我通常只是覆盖相关小部件的dragEnterEvent()dragMoveEvent()dropEvent()方法(而不是安装事件过滤器),但原理是相同的(因此我希望解决方案是一样的。)