파이썬 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)
FWIW, 예제 코드는 Linux (modier 키 포함 또는 제외)에서 잘 작동합니다. – ekhumoro
힌트 감사합니다! 그것은 내 개발 플랫폼에 관한 것으로 보인다. 나는 다른 Windows 10 컴퓨터에서 코드를 실행하려고 시도했지만 완벽하게 실행됩니다 ... 여전히 중단되는 것은 무엇인지 모르지만 적어도 개발을 계속할 수는 있습니다. – Isn