PySide2 拖放功能不起作用

Posted

技术标签:

【中文标题】PySide2 拖放功能不起作用【英文标题】:PySide2 drag & drop functionality does not work 【发布时间】:2019-01-29 13:23:34 【问题描述】:

我有这个使用 PySide2 的简单脚本,尽管我尝试使用 PyQt5 使用相同的脚本并获得相同的结果。我正在尝试将文件拖放到我的窗口中并获取它们的文件路径:

import sys
from PySide2.QtWidgets import QApplication, QMainWindow


class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.setAcceptDrops(True)

    def dragEnterEvent(self, e):
        if e.mimeData().hasUrls():
            e.acceptProposedAction()

    def dropEvent(self, e):
        for url in e.mimeData().urls():
            file_name = url.toLocalFile()
            print("Dropped file: " + file_name)


app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()

在我的系统上,这不允许拖放操作到此窗口。 dragEnterEvent 永远不会被调用。我错过了什么吗?

【问题讨论】:

您的脚本在我的计算机上使用 python 3.6.5 在 Windows 7 上按预期工作(允许拖放和打印文件路径),并使用 PySide2 5.11.2 和 5.12.0 进行测试。你的配置是什么? @jpeg 感谢试用,我的配置是 Windows 10 (1809)、Python 3.6.8、PySide2 5.12。我也试过 PySide2 5.11.2。可能是 Windows 10 的问题?我的同事也在他的电脑上试了一下,结果是一样的。 拖放是否真的适用于您系统上的其他应用程序?使用例如Drag and drop not working in windows 10 进行网络搜索会产生大量资源,其中之一可能有助于解决您的问题...? @jpeg 谢谢,是的,其中一个解决方案有效:使用 regedit 禁用 EnableLUA。但我不明白为什么 PySide2 应用程序需要这样做,因为即使启用了 EnableLUA,拖放也可以在我的其他应用程序上工作,例如,我可以通过拖动在 Sublime 中打开文件而不会出现问题。 听起来不错。请考虑将您的解决方案添加为答案并将其标记为已接受。我也不明白为什么在 Windows 10 下 PySide2 需要它,但在 Windows 7 下不需要,可能应该问微软...... 【参考方案1】:

事实证明,它发生在某些装有 Windows 10 的系统上。解决方案是从注册表中禁用 EnableLUA

HKEY_LOCAL_MACHINE > SOFTWARE > Microsoft > Windows > CurrentVersion > Policies > System

将密钥 EnableLUA1 更改为 0。然后重新启动计算机。请注意,如果程序试图更改您系统上的某些内容(这可能是一个安全问题),这将导致您的系统不显示任何对话框。

【讨论】:

以上是关于PySide2 拖放功能不起作用的主要内容,如果未能解决你的问题,请参考以下文章

拖放功能不起作用 - Flash

Angular js/MVC 中的文件拖放功能不起作用

fullCalendar 中的拖放事件不起作用

WPF中的拖放文件不起作用

拖放功能在 Android Studio 中不起作用。甚至不能点击显示属性

Angular Material表拖放列排序不起作用