python - PyQt 拖放 - 没有任何反应

标签 python drag-and-drop pyqt

我正在尝试将文件拖放到窗口上(我也用 QListWidget 尝试过同样的操作,但也没有成功)

测试.py:

#! /usr/bin/python
# Test
from PyQt4 import QtCore, QtGui
import sys
from qt_test import Ui_MainWindow
class MyForm(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.setupUi(self)
        self.__class__.dragEnterEvent = self.DragEnterEvent
        self.__class__.dragMoveEvent = self.DragEnterEvent
        self.__class__.dropEvent = self.drop
        self.setAcceptDrops(True)
        print "Initialized"
        self.show()

    def DragEnterEvent(self, event):
        event.accept()

    def drop(self, event):
        link=event.mimeData().text()
        print link

def main():
    app = QtGui.QApplication(sys.argv)
    mw = MyForm()
    sys.exit(app.exec_())


if __name__== "__main__":
    main()

这是 qt_test.py

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'untitled.ui'
#
# Created: Thu May 20 12:23:19 2010
#      by: PyQt4 UI code generator 4.6
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        MainWindow.setAcceptDrops(True)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))

我已阅读 this email我已经遵循了那里所说的一切。除了“初始化”之外,我仍然没有得到任何输出,并且拖动似乎没有被接受(无论是来自文件管理器的文件还是从文本编辑器拖动的纯文本)。你知道我做错了什么吗?

谢谢!

最佳答案

是的。嗯...有点像。

从编辑器中拖动纯文本对我来说效果很好,对于文件来说......

当您将文件拖放到应用中时,其类型为“text/uri-list”。为此,您需要使用 event.mimeData().urls() 方法来获取 PyQt4.QtCore.QUrl 对象列表。

您需要以不同的方式处理不同的 mime 数据格式。您可以使用 mimeData() 的以下方法来找出它具有哪些属性:

hasColor()
hasFormat()
hasHtml()
hasImage()
hasText()
hasUrls()

关于python - PyQt 拖放 - 没有任何反应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2871663/

相关文章:

c# - 对象上的 DragEnter 事件,AllowDrop=False

python - mouseDoubleClickEvent 与 QLineEdit

python - 为什么在Python中非常大的浮点值之间的比较会失败?

python - numpy 中的 set_printoptions() 错误

python - 使用 lxml 处理来自请求的 html。类型错误 : can't pickle _ElementUnicodeResult objects

javascript - 将具有相同 ID 类和标签 HTML 的多个元素拖放到屏幕上的任意位置

java - 添加 JComponent 后 getY() 返回 0

python - 如何检测小部件是否在视线范围内? pyqt

python - 使 QLabel 可点击

python - Flask-Babel 更新现有的 messages.pot 文件