2011-12-19 17 views
11

Sto tentando di impostare un'applicazione che accetti i file havin inseriti in essa. Quindi, sto cercando un modo per estrarre il percorso quando vengono rilasciati.PyQt: acquisizione del nome file per il file eliminato nell'app

In questo momento, ho il drag and drop abilitato per la parte destra dell'applicazione, e accetterà il testo lasciato cadere, ma lo faccio non so come gestire avere un file è sceso in

sto usando:.

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) 

che è leggermente modificare il codice fornito nel Drag and Drop in PyQT4 tutorial.


non riuscivo a ottenere @ekhumoro risposta a lavorare per me, ma mi ha dato più posti a guardare, e ho trovato PyQT4: Drag and drop files into QListWidget che ha aiutato.

Oltre ai suggerimenti forniti da ekhumoro, era necessario implementare l'evento di spostamento trascinamento. Quello che ho finalmente usato sembrava:

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

penso 'hasUrls' è una funzione, in modo che le condizioni che lo utilizzano valutare sempre a' Vero ' – Cuadue

risposta

12

La classe QMimeData ha metodi per trattare con 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

Grazie, questo sicuramente mi ha fatto sulla buona strada. – TimothyAWiseman

+1

Quindi ho notato che se inserisco un file e stampo event.mimeData(). Urls() restituisce valori come '/ .file/id = 6571367.6613263', che credo siano una sorta di file temporanei OSX. Chiedendosi, come si fa a ottenere il nome file o la directory corretta rispetto a questo tipo di marcatore temporaneo? –

Problemi correlati