Python 如何在PyQt/PySide中获取删除的文件名

Python 如何在PyQt/PySide中获取删除的文件名,python,events,pyqt,drag-and-drop,pyside,Python,Events,Pyqt,Drag And Drop,Pyside,我正在尝试设置一个应用程序,它将接受放入其中的havin文件。因此,我正在寻找一种方法,在它们被插入时提取路径 现在,我已经为应用程序的正确部分启用了拖放功能,它将接受插入的文本,但我不知道如何处理插入的文件 我正在使用: def PTE_dragEnterEvent(self, e): if e.mimeData().hasFormat('text/plain'): e.accept() else: e.ignore() def PTE_dr

我正在尝试设置一个应用程序,它将接受放入其中的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)
它稍微修改了中提供的代码


我不能完全让@ekhumoro的答案为我工作,但它给了我更多的地方去看,我发现这很有帮助

除了Ekhumaro提出的建议之外,我还需要实施drag-move事件。我最后使用的是:

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()
该类具有处理已删除URL的方法。下面是一个简单的工作示例:

# from PyQt4.QtGui import QApplication, QLabel
# from PySide2.QtWidgets import QApplication, QLabel
from PyQt5.QtWidgets import QApplication, QLabel

class Window(QLabel):
    def __init__(self):
        super().__init__()
        self.setAcceptDrops(True)

    def dragEnterEvent(self, event):
        print('drag-enter')
        if event.mimeData().hasUrls():
            print('has urls')
            event.accept()
        else:
            event.ignore()

    def dropEvent(self, event):
        lines = []
        for url in event.mimeData().urls():
            lines.append('dropped: %r' % url.toLocalFile())
        self.setText('\n'.join(lines))

app = QApplication(['Drag & Drop'])
window = Window()
window.setGeometry(50, 100, 400, 300)
window.show()
app.exec_()

我认为
hasUrls
是一个函数,所以使用它的条件总是计算为
True
,所以我注意到,如果我将一个文件放入并打印event.mimeData().urls()它会返回类似
/.file/id=6571367.6613263
的值,我认为这是某种OSX临时文件。想知道,相对于这种临时标记,如何获得正确的文件名或目录?