2011-12-19 4 views
11

Próbuję skonfigurować aplikację, która będzie akceptować pliki havin wrzucone do niej. Tak, szukam sposobu, aby wyodrębnić ścieżkę, gdy zostaną one wkompilowane.PyQt: Pobieranie nazwy pliku dla pliku odrzuconego w aplikacji

W tej chwili mam włączoną funkcję "przeciągnij i upuść" dla właściwej części aplikacji i zaakceptuję tekst wpuszczony, ale robię nie wiem, jak radzić sobie mając plik spadła w

używam.

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) 

który jest nieco modyfikacji kodu zawartych w poradniku Drag and Drop in PyQT4.


nie mogłem dostać @ekhumoro odpowiedź do pracy dla mnie, ale to dało mi więcej miejsc patrzeć i znalazłem PyQT4: Drag and drop files into QListWidget co pomogło.

Oprócz sugestii wykonanych przez ekhumoro musiałem zaimplementować akcję przeciągania. Co ja w końcu wykorzystane wyglądało:

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

myślę 'hasUrls' jest funkcją, więc swoje warunki, które go używają zawsze oceny na' Prawdziwa ' – Cuadue

Odpowiedz

12

Klasa QMimeData ma metody radzenia sobie z 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

Dzięki, to na pewno doprowadziło mnie do właściwej drogi. – TimothyAWiseman

+1

Zauważyłem więc, że jeśli zrzucę plik i wydrukuję event.mimeData(). Urls() zwraca wartości takie jak '/ .file/id = 6571367.6613263', które moim zdaniem są plikami tymczasowymi OSX. Zastanawiasz się, w jaki sposób chciałbyś uzyskać odpowiednią nazwę pliku lub katalogu w przeciwieństwie do tego tymczasowego markera? –