2017-01-12 6 views
3

pyqt5で私のリストウィジェットでドラッグアンドドロップ(画像またはファイルを使用)をしようとしています。私はpyqt4で例をたくさん見つけることができますが、新しいバージョンでは動作しません1つの部分がある:「dropevent」でpyqt5(SIGNAL)でドラッグアンドドロップする

は:

self.emit(QtCore.SIGNAL("dropped"), links) 

とのMainFormで:

self.connect(self.view, QtCore.SIGNAL("dropped"), self.pictureDropped) 

私は多くの投稿を読んでいますが、pyqt5を使ってこれを書き留めておくべき答えを見つけられないようです。誰も私にこれを手伝ってもらえますか?全体の例に

リンク: PyQT4: Drag and drop files into QListWidget

答えて

1

シンプル。

  1. 信号は、パラメータとして来る最初
  2. スロットに来なければなりません。
  3. 信号が作成された後に接続する必要があります。
  4. 接続が確立された後でなければ、送信しないでください。

ここでは、小さな例で行く:あなたの例では

self.signalOwner.mySignal.connect(self.slotFunction) 

のは、そう、ビューが信号を所有し、pictureDroppedはあなたのスロットの関数であることをことを言うと考えてみましょう:

self.view.dropped.connect(self.pictureDropped) 

あなたのシグナルは特定のタイプまたは何も放出していないことを忘れないでください。あなたの@pyqtSlot fu機能は、信号が発する同じ量のパラメーターを受信する同じタイプを受信しなければなりません。

私はドラッグに関するいくつかの短い時間前にポストを作り、画像をドロップし、イベントを受け入れる方法とクラスがどのように動作するかそれを把握するために多くの困難があった、それがあれば、これだけよりも少し深い信号ですあなたはここで必要POSTです:あなたはnew-style syntaxを使用する必要があるのに対し、D

+0

私の質問にお答えしていただきありがとうございます。私はこれを試してみるつもりです。あなたの投稿をチェックアウトして、信号がどのように働くかについてもっと知ることができます。 – user7409069

+0

クール・サール、私は強くポストを見ることをお勧めします、私はそれを理解しようと多くのトラブルがあった、誰も私に答えたが、いくつかの深い研究の後、私はそれを最終的に達成し、ドラッグとドロップイベント。私が尋ねて自分自身に答えたとしても、それをチェックするにはまだ価値がある:D。あなたが一生懸命努力していることを知って偉大な – yurisnm

0

はあなたのリンクの例では、old-style signal and slot syntaxを使用しています。 PyQt4(バージョン4.5以降)ではどちらのスタイルも使用できますが、PyQt5は新しいスタイルのみをサポートしています。

古いスタイルの構文は、カスタム信号は、オンザフライで放出することを許可さが、信号がクラスで事前に宣言されている新しいスタイルの構文の要求:

class ListWidget(QtWidgets.QListWidget): 
    dropped = QtCore.pyqtSignal(list) 

    def __init__(self, parent=None): 
     ... 

    def dropEvent(self, event): 
     ... 
     self.dropped.emit(list_of_files) 

信号接続が続いています

class MainWindow(QtWidgets.QMainWindow): 
    def __init__(self, parent=None): 
     ... 
     self.listWidget = ListWidget() 
     self.listWidget.dropped.connect(self.handleDropped) 

    def handleDropped(self, list_of_files): 
     print('dropped:', list_of_files) 
+0

あなたの答えを共有していただきありがとうございます、私はこの方法もチェックアウトします! – user7409069