Python:捕获QListWidget中的重新排序事件?

时间:2016-12-13 03:00:41

标签: python linux qt pyqt

我需要响应QListWidget中项目的拖放重新排序。我无法找到要使用的QEvent。任何帮助将不胜感激!

我使用eventFilter例程来捕获GUI中的事件:

from PyQt4 import QtGui
from PyQt4 import QtCore
from PyQt4.QtCore import *
from PyQt4.QtGui import *

def eventFilter(self, sourceObj, event):
    if event.type()== QtCore.QEvent.Drop:
        print("got to drop event")
        (processing code here)

也许这个事件不会触发项目的拖放重新排序,因为拖放是小部件内部的(例如,小部件外部没有任何东西掉在上面)?

我已经尝试QtCore.QEvent.DropQtCore.QEvent.MouseButtonRelease但没有成功。我应该使用哪个活动?

(我在Ubuntu 16.10上使用Python3,PyQt4。我的eventFilter例程适用于GUI中的其他操作,如clicks,lostFocus等。)

1 个答案:

答案 0 :(得分:3)

这是我找到的解决方案。解决方案是使用eventFilter来监听ChildRemoved QEvent。显然,当QListWidget中的项目通过拖放重新排序时,QT会触发此事件。

步骤1.在包含QListWidget的类的 init (self)中,为要捕获其事件的窗口小部件安装事件过滤器。

def __init__(self):
    self.lstYourWidgetNameHere.installEventFilter(self)

步骤2.在同一个类的eventFilter例程中,检查ChildRemoved QEvent。

def eventFilter(self, sourceObj, event):
    objName = str(sourceObj.objectName())
    if event.type()== QtCore.QEvent.ChildRemoved:
        if objName == "lstYourWidgetNameHere":      
            (your code here)