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


我正在尝试设置一个接受放入其中的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)

这稍微修改了提供的代码 在PyQT4中拖放 教程。


我无法让@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()

2765
2017-12-19 22:35


起源

我认为 hasUrls 是一个函数,因此使用它的条件总是评估为 True - Cuadue


答案:


QMimeData class有处理方法 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...

13
2017-12-20 19:15



谢谢,这绝对让我走上正轨。 - TimothyAWiseman
所以我注意到如果我删除一个文件并打印event.mimeData()。urls()它会返回类似的值 /.file/id=6571367.6613263,我相信是某种OSX临时文件。想知道,如何获得正确的文件名或目录而不是这种临时标记? - tom f