2011-12-19 48 views
11

我试图设置一个应用程序,将接受放入它的havin文件。所以,我正在寻找一种方法来提取路径,当它们被放入时。PyQt:获取文件名称的文件放在应用程序

现在,我已经为应用程序的右侧部分启用了拖放功能,并且它会接受放入的文本,但我确实不知道如何处理具有文件在下降

我使用:

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() 
+0

我想'hasUrls'是一个功能,让使用它的条件始终评估为真' ' – Cuadue

回答

12

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... 
+0

谢谢,这绝对让我走上正轨。 – TimothyAWiseman

+1

所以我注意到如果我删除一个文件并打印event.mimeData()。urls(),它会返回类似'/ .file/id = 6571367.6613263'的值,我相信它们是某种OSX临时文件。想知道,如何才能获得正确的文件名或目录而不是这种临时标记呢? –

相关问题