2011-12-19 25 views
11

havinファイルを受け入れるアプリケーションをセットアップしようとしています。だから、私は彼らがドロップされたときにパスを抽出する方法を探しています。PyQt:ファイルのファイル名を取得するアプリケーションに落ちた

今、私はドラッグアンドドロップアプリケーションの右側の部分を有効にし、ドロップされたテキストを受け入れますが、私はないファイルがで落とした扱い方を知っている

を私は使用しています:。少しDrag and Drop in PyQT4チュートリアルで提供されているコードを変更している

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) 

を。


私はかなり私のために働くために@ekhumoro答えを得ることができませんでしたが、それは私に見てより多くの場所を与えた、と私は助けPyQT4: Drag and drop files into QListWidgetを発見しました。

ekhumoroの提案に加えて、ドラッグ移動イベントを実装する必要がありました。 QMimeDataクラスはdropped urlsに対処するためのメソッドを持ってい

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

私はそれを使用するあなたの条件は常にtrue 'に評価' hasUrls'が関数である、そう思う私は最終的に使用することのように見えました' – Cuadue

答えて

12

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の一時ファイルのようなものです。ワンタッチでは、このような一時的なマーカーとは対照的に、適切なファイル名やディレクトリをどうやって取得するのでしょうか? –

関連する問題