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

标签 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 中的其他操作,如点击、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/

相关文章:

linux - Git 和 Apache 共享 webroot 上的权限

qt - 在 QGraphicsScene 中我无法获得正确的项目

c++ - PyQt 与 PySide 比较

python - Pandas 数据帧 : Compute values based on column min/max

python - 更改 pandas 0.13.0 "print dataframe"以像早期版本一样打印数据帧

linux - 如何在 linux 中打印另一个用户的当前工作目录?

c++ - 奇怪的 QString 初始化为 0 - 它有什么作用?

python - C :\Python37\python. exe: 无法打开文件 'scrapy' : [Errno 2] 没有这样的文件或目录

javascript - 桥接 Python 后端和 JavaScript 前端

c++ - 为什么在使用 boost::asio 为 STDIN/STDOUT 管道传输到程序时,read() 会因 EAGAIN 失败?