2011-12-19 10 views
11

Estoy tratando de configurar una aplicación que aceptará los archivos havin que se le han agregado. Por lo tanto, estoy buscando una forma de extraer la ruta cuando se incluyan.PyQt: Obteniendo el nombre del archivo para el archivo eliminado en la aplicación

Ahora mismo, tengo la opción de arrastrar y soltar habilitada para la parte derecha de la aplicación, y aceptará texto insertado, pero lo hago no saber cómo manejar tener un archivo cayó en

estoy utilizando:.

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) 

qué está modificando ligeramente el código proporcionado en el Drag and Drop in PyQT4 tutorial.


no pude conseguir @ekhumoro respuesta a trabajar para mí, pero me dio más lugares para buscar, y me encontré con PyQT4: Drag and drop files into QListWidget que ayudó.

Además de las sugerencias hechas por ekhumoro, tuve que implementar el evento de movimiento de arrastre. Lo que finalmente utilicé parecido:

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

Creo 'hasUrls' es una función, por lo que sus condiciones que lo utilizan siempre evaluar a' Verdadero ' – Cuadue

Respuesta

12

La clase QMimeData tiene métodos para tratar 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

Gracias, esto definitivamente me puso en el camino correcto. – TimothyAWiseman

+1

Así que noté que si dejo caer un archivo e imprimo event.mimeData(). Urls() devuelve valores como '/ .file/id = 6571367.6613263', que creo que son algún tipo de archivos temporales de OSX. Preguntarse, ¿cómo conseguir uno el nombre de archivo o directorio adecuado en lugar de este tipo de marcador temporal? –

Cuestiones relacionadas