2017-01-08 35 views
-1

我正在python 3.5和Qt5.7中使用两个QTableWidgets创建应用程序,我希望能够将其中一个表中的项目放入另一个表格中。我在两个表上设置了拖放设置,一切正常,直到我按下修饰键(Ctrl,Alt,Shift等)。从此时拖放功能停止工作。pyqt5 - 修改键关键点拖放

我已经尝试子表和重新实现dnd事件(QDragEnterEvent,QDragMoveEvent,QDropEvent)没有成功。我还尝试使用mousePreseEvent捕获鼠标拖动的起始点,并使用mouseMoveEvent创建拖动,并创建一个eventFilter来捕获修改键,并在需要时禁用它们,但它们都不起作用。

使用拖放事件我可以看到,当你开始一个拖动动作时,按下任何一个修饰键后,拖动事件被创建,但在此之后创建了拖放事件,并且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_()) 

仅供参考开发系统是一台机器在Windows 10

+0

FWIW,示例代码在Linux上可以正常工作(有或没有更新键)。 – ekhumoro

+0

谢谢你的提示!这似乎是关于我的开发平台的。我试图在其他Windows 10机器上运行代码,并且运行完美无瑕......我仍然不知道是什么让它崩溃,但至少我可以继续开发。 – Isn

回答

1

最后我找到了问题的原因,并没有什么任何的框架有关。这是由于在网络上使用同一鼠标和键盘的多台计算机的软件造成的。