2010-05-20 64 views
1

我試圖得到一個文件拖放到一個窗口(我試過同樣的事情用QListWidget沒有成功有太多)PyQt的拖放 - 什麼也沒有發生

test.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而且我是按照一切說有。我仍然沒有得到任何輸出,除了「初始化」,並且拖動似乎沒有被接受(無論是文件管理器的文件還是文本編輯器拖動的純文本)。你知道我做錯了什麼嗎?

謝謝!

+0

在我的情況,我發現,而QListView需要dragMoveEvent的重新實施,除了dragEnter事件和下降事件。 QListWidget只有後兩種。 – jorxster 2017-07-11 03:01:48

回答

3

是的。那麼......有點。

拖動從編輯器的純文本對我來說工作得很好,至於文件...

當你刪除一個文件到您的應用程序,它的類型是"text/uri-list"。爲此,您需要使用event.mimeData().urls()方法獲取PyQt4.QtCore.QUrl對象的列表。

您將需要以不同的方式處理不同的MIME數據格式。您可以使用mimeData()的以下方法來找出它有什麼屬性:

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

拖動文字對我來說根本不起作用。 「+」鼠標指針不出現,終端上不會顯示任何文本。您是否對所提供的文件進行了更改? – Umang 2010-05-20 16:01:38

+0

謝謝!我設法解決了這個問題。 python-qt4昨天遷移到擠壓,似乎已經修復了我。我已經接受了你的回答,因爲在別的地方查看這個時,我沒有發現有關.urls()方法的任何信息,所以你爲我節省了一些時間。 – Umang 2010-05-22 08:33:12

+0

我通過使用'dir(event.mimeData())'找到了.urls()方法。如果你不使用Windows,它可能會解釋行爲上的差異。 – tgray 2010-05-24 12:58:51

相關問題