2017-01-08 6 views
-1

파이썬 3.5와 Qt5.7에서 두 개의 QTableWidgets를 사용하여 응용 프로그램을 만들고 있는데, 하나의 테이블에서 다른 테이블로 항목을 드롭 할 수 있기를 원합니다. 필자는 두 테이블 모두에서 드래그 앤 드롭 설정을 설정하고 수정 자 키 (Ctrl, Alt, Shift 등)를 누르기 전까지 모든 것이 올바르게 작동합니다. 이 순간부터 끌어서 놓기 기능이 작동을 멈 춥니 다.pyqt5 - 수정 자 키 띄우기 드래그 앤 드랍

나는 이미 테이블을 서브 클래스화하고 성공없이 dnd 이벤트 (QDragEnterEvent, QDragMoveEvent, QDropEvent)를 재 구현하려고 시도했다. mousePreseEvent를 사용하여 마우스 이벤트를 다시 구현하여 드래그 시작 지점을 catch하고 mouseMoveEvent를 사용하여 올바른 mimetype으로 드래그를 만들고 eventFilter를 만들어 수정 자 키를 catch하고 필요할 때 사용하지 않도록 설정했지만 아무 것도 작동하지 않았습니다.

끌어서 놓기 이벤트를 사용하면 끌기 이동을 시작할 때 수정 자 키 중 하나를 누른 후 끌어 오기 이벤트가 만들어 지지만 그 후에 만 ​​놓기 이벤트가 만들어지고 dnd가 마우스를 움직이기조차했다.

해결 방법이 있습니까? 아니면이 문제의 원인을 알고 있습니까?

Qt5.7 디자이너의 pyuic5로 생성 된 간단한 코드를 동일한 문제가 발생할 수있는 두 개의 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_()) 

그냥 참조 용 개발 시스템은 마지막으로 내가 문제의 원인을 발견하고 프레임 워크의 관련 아무것도 윈도우 (10)

+0

FWIW, 예제 코드는 Linux (modier 키 포함 또는 제외)에서 잘 작동합니다. – ekhumoro

+0

힌트 감사합니다! 그것은 내 개발 플랫폼에 관한 것으로 보인다. 나는 다른 Windows 10 컴퓨터에서 코드를 실행하려고 시도했지만 완벽하게 실행됩니다 ... 여전히 중단되는 것은 무엇인지 모르지만 적어도 개발을 계속할 수는 있습니다. – Isn

답변

1

가있는 시스템이다. 네트워크를 통해 동일한 마우스 및 키보드를 사용하는 둘 이상의 컴퓨터를 사용하는 소프트웨어 때문이었습니다.