PyQt:获取应用程序中删除的文件的文件名

时间:2011-12-19 22:35:19

标签: python drag-and-drop pyqt pyqt4

我正在尝试设置一个接受放入其中的havin文件的应用程序。所以,我正在寻找一种方法来在它们被放入时提取路径。

现在,我已经为应用程序的右侧部分启用了拖放操作,并且它将接受放入的文本,但我不知道如何处理丢弃的文件。

我正在使用:

def PTE_dragEnterEvent(self, e):
    if e.mimeData().hasFormat('text/plain'):
        e.accept()
    else:
        e.ignore() 

def PTE_dropEvent(self, e):
    newText = self.ui.fileListPTE.toPlainText() + '\n\n' + e.mimeData().text()
    self.ui.fileListPTE.setPlainText(newText)

稍微修改了Drag and Drop in PyQT4教程中提供的代码。


我无法得到@ekhumoro回答为我工作,但它给了我更多的地方看,我发现PyQT4: Drag and drop files into QListWidget有帮助。

除了ekhumoro提出的建议,我还需要实现拖动移动事件。我最终使用的是:

def dragEnterEvent(self, event):
    if event.mimeData().hasUrls:
        event.accept()
    else:
        event.ignore()

def dragMoveEvent(self, event):
    if event.mimeData().hasUrls:
        event.setDropAction(QtCore.Qt.CopyAction)
        event.accept()
    else:
        event.ignore()

def dropEvent(self, event):
    if event.mimeData().hasUrls:
        event.setDropAction(QtCore.Qt.CopyAction)
        event.accept()

        newText = self.ui.fileListPTE.toPlainText()
        for url in event.mimeData().urls():
            newText += '\n' + str(url.toLocalFile())
        self.ui.fileListPTE.setPlainText(newText)
        self.emit(QtCore.SIGNAL("dropped"))
    else:
        event.ignore()

1 个答案:

答案 0 :(得分:14)

QMimeData类有处理dropped urls的方法:

def dragEnterEvent(self, event):
    if event.mimeData().hasUrls():
        event.accept()
    else:
        event.ignore()

def dropEvent(self, event):
    for url in event.mimeData().urls():
        path = url.toLocalFile().toLocal8Bit().data()
        if os.path.isfile(path):
            print path
            # do other stuff with path...