2011-12-19 3 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(), он возвращает значения, такие как '/ .file/id = 6571367.6613263', которые, я считаю, являются своего рода временными файлами OSX. Интересно, как можно было бы получить правильное имя файла или каталог в отличие от такого временного маркера? –

Смежные вопросы