在PyQt5中未触发dropEvent

亚历克斯

我试图在我的应用程序中实现“拖放”,但是dropEvent从未调用目标小部件中的。

我对这个问题进行了很多搜索,但是发现的每个解决方案都涉及到Override dragMoveEvent,这是我做的,但没有任何区别。

由于上述原因,我的示例代码也不起作用:

主窗口类:

class Win(QtWidgets.QWidget):
    def __init__(self):
        super(Win, self).__init__()
        self.setGeometry(200, 300, 400, 200)
        self.setLayout(QtWidgets.QHBoxLayout())
        self.layout().addWidget(DragLabel())
        self.layout().addWidget(DropTest())

标签拖动:

class DragLabel(QtWidgets.QLabel):
    def __init__(self):
        super(DragLabel, self).__init__()
        self.setText("Drag me")

    def mouseMoveEvent(self, e):
        if e.buttons() != QtCore.Qt.LeftButton:
            return

        mimeData = QtCore.QMimeData()
        mimeData.setText("Test drop")

        drag = QtGui.QDrag(self)
        drag.setMimeData(mimeData)

        dropAction = drag.exec(QtCore.Qt.CopyAction)

小部件放到:

class DropTest(QtWidgets.QWidget):
    def __init__(self):
        super(DropTest, self).__init__()
        self.setAcceptDrops(True)

    def dragEnterEvent(self, e):
        print("DragEnter")
        e.accept()

    def dragMoveEvent(self, e):
        print("DragMove")
        e.accept()

    def dropEvent(self, e):
        print("DropEvent")
        position = e.pos()
        print(position)
        e.accept()

当我将标签拖到另一个小部件上时,我看到了dragEnterEventdragMoveEvent都被调用,但是当我实际上放下标签时,该dropEvent函数没有任何消息

另外,关闭窗口后,应用程序将挂起并且不会退出。

我正在Fedora 31中使用安装了DNF的PyQt 5.13.1x86_64。Python版本是3.7.5,没有virtualenv。

永乐

正如评论中提到的那样,我已经在这篇文章中回答了相同的问题,并且我已经在使用fedora31的docker中对其进行了测试,并且可以正常工作,因此在与OP讨论后,他在评论中指出了这一点

[PyQt5]以前是从DNF安装的,但是我很确定setuptools也从pip安装了它,作为我应用程序的依赖项。

问题的原因是OP将两种安装方式组合在一起:dnf和pip,它们各自使用不同版本的Qt,编译标志等进行编译,这可能导致某些功能失败。解决方案是通过两种方法都卸载PyQt5,然后仅重新安装其中一种。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

子对话框未显示在PyQt5中

来自分类Dev

mouseReleaseEvent在应用程序启动时触发,而不是在PyQt5中单击时触发

来自分类Dev

PyQt5按钮未连接

来自分类Dev

标签文字未更新,只有最后一行更新了pyqt5中的标签

来自分类Dev

来自MySQL数据库的数据未显示在PyQt5的QTableWidget中

来自分类Dev

利用PyQt5中的QtQuick控件

来自分类Dev

更新PYQT5中的图表数据

来自分类Dev

在PyQt5中串联多个QSplitter

来自分类Dev

PyQt5中的顺序编程复制

来自分类Dev

在PyQt5中实现画布

来自分类Dev

在PyQt5中打印pdf文档

来自分类Dev

在Windows 7中安装PyQt5

来自分类Dev

QTableWidget中的PyQt5 QComboBox

来自分类Dev

PyQt5中的哪个Gstreamer?

来自分类Dev

PyQt5 中的问号按钮

来自分类Dev

PyQt5 中的访问冲突错误

来自分类Dev

PyQt5 中的 QWebEngineView 和 QWidget

来自分类Dev

PyQT5 中的 GridLayout 和 VerticalLayout

来自分类Dev

PyQT5信号连接方法未实际绑定方法

来自分类Dev

js:未捕获(承诺)为空[PYQT5 QWebEnginePage]

来自分类Dev

Pycharm 上的 PyQt5,未使用模块

来自分类Dev

PyQt5 未选中复选框时,我可以从状态栏中删除进度吗?

来自分类Dev

QQuickImageProvider PyQt5

来自分类Dev

PyQT5 开发

来自分类Dev

如何从PyQt5中的QMessageBox中删除图标?

来自分类Dev

在mvc 5中未触发基本方法

来自分类Dev

在MVC 5中未触发基本方法

来自分类Dev

Pyqt4中未触发textChanged事件

来自分类Dev

PyQt5中的connect()方法在哪里?