我需要响应 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.Drop
和 QtCore.QEvent.MouseButtonRelease
但没有成功。我应该使用哪个事件?
(我在 Ubuntu 16.10 上使用 Python3、PyQt4。我的 eventFilter 例程适用于 GUI 中的其他操作,如点击、lostFocus 等)
最佳答案
这是我发现有效的解决方案。解决方案是使用事件过滤器来监听 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)
关于Python:捕获 QListWidget 中的重新排序事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41113080/