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

Tim*_*man 11 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)
Run Code Online (Sandbox Code Playgroud)

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


我无法得到@ekhumoro为我工作的答案,但它给了我更多的地方,我找到了PyQT4:将文件拖放到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()
Run Code Online (Sandbox Code Playgroud)

ekh*_*oro 15

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...
Run Code Online (Sandbox Code Playgroud)

  • 所以,如果我把一个文件和打印event.mimeData()我注意到了.网址()返回像`/ .file/ID = 6571367.6613263`,我相信有某种OSX临时文件值.想知道,如何获得正确的文件名或目录而不是这种临时标记? (2认同)