2017-01-08 8 views
-1

私はPython 3.5とQt5.7で2つのQTableWidgetsを使ってアプリケーションを作成しています。テーブルの1つから別のテーブルにアイテムをドロップしたいと考えています。私は両方のテーブルにドラッグアンドドロップの設定を行い、修飾キー(Ctrl、Alt、Shiftなど)を押すまですべてが正しく機能します。この時点から、ドラッグ&ドロップ機能は動作しなくなります。pyqt5 - 修飾キーがドラッグアンドドロップする

私はすでにテーブルをサブクラス化して、成功しないでdndイベント(QDragEnterEvent、QDragMoveEvent、QDropEvent)を再実装しようとしました。ドラッグ開始点を捕捉するmousePreseEventと正しいmimetypeを持つドラッグを作成するmouseMoveEventを使用して、マウスイベントを再実装しようとしました。また、modifierキーをキャッチし、必要に応じて無効にするeventFilterを作成しました。

ドラッグアンドドロップイベントを使用すると、ドラッグの移動を開始するときに修飾キーのいずれかを押すと、ドラッグイベントが作成されますが、その直後にドロップイベントが作成され、マウスを動かすことさえできる。

誰も解決策を持っているか、この動作の理由を知っていますか?

Qt5.7デザイナーのpyuic5で生成された簡単なコードを、同じ問題が発生する可能性のある2つのQListWidgetsで添付します。

from PyQt5 import QtWidgets 

class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
     MainWindow.resize(640, 480) 
     self.centralwidget = QtWidgets.QWidget(MainWindow) 
     self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget) 
     self.listWidget = QtWidgets.QListWidget(self.centralwidget) 
     self.listWidget.setDragEnabled(True) 
     self.listWidget.setDragDropMode(QtWidgets.QAbstractItemView.DropOnly) 
     item = QtWidgets.QListWidgetItem() 
     item.setText("1") 
     self.listWidget.addItem(item) 
     item = QtWidgets.QListWidgetItem() 
     item.setText("2") 
     self.listWidget.addItem(item) 
     item = QtWidgets.QListWidgetItem() 
     item.setText("3") 
     self.listWidget.addItem(item) 
     self.listWidget.setSortingEnabled(False) 
     self.horizontalLayout.addWidget(self.listWidget) 
     self.listWidget_2 = QtWidgets.QListWidget(self.centralwidget) 
     self.listWidget_2.setDragEnabled(True) 
     self.listWidget_2.setDragDropMode(QtWidgets.QAbstractItemView.DragOnly) 
     self.listWidget_2.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) 
     item = QtWidgets.QListWidgetItem() 
     item.setText("1") 
     self.listWidget_2.addItem(item) 
     item = QtWidgets.QListWidgetItem() 
     item.setText("2") 
     self.listWidget_2.addItem(item) 
     item = QtWidgets.QListWidgetItem() 
     item.setText("3") 
     self.listWidget_2.addItem(item) 
     self.listWidget_2.setSortingEnabled(False) 
     self.horizontalLayout.addWidget(self.listWidget_2) 
     MainWindow.setCentralWidget(self.centralwidget) 

if __name__ == "__main__": 
    import sys 
    app = QtWidgets.QApplication(sys.argv) 
    MainWindow = QtWidgets.QMainWindow() 
    ui = Ui_MainWindow() 
    ui.setupUi(MainWindow) 
    MainWindow.show() 
    sys.exit(app.exec_()) 

ただ、参考のために開発システムがWindows 10

+0

FWIW、このコード例は、Linux(modierキーありまたはなし)でうまく動作します。 – ekhumoro

+0

ヒントありがとうございます!それは私の開発プラットフォームに関するものと思われます。私は他のWindows 10マシンでコードを実行しようとしましたが、それは完璧に実行されています...私はまだ何が壊れているか分かりませんが、少なくとも私は開発を続けることができます。 – Isn

答えて

1

を持つマシンで最後に、私は、問題の原因を発見し、フレームワークのいずれかと関連何もなかったです。これは、同じマウスとキーボードを持つ複数のコンピュータをネットワーク上で使用するためのソフトウェアによって引き起こされました。