2011-12-19 86 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臨時文件。想知道,如何才能獲得正確的文件名或目錄而不是這種臨時標記呢? –

相關問題