2017-01-08 13 views
-1

Я делаю приложение в python 3.5 и Qt5.7 с двумя QTableWidgets, и я хочу иметь возможность отбрасывать элементы из одной из таблиц в другую. Я установил параметры перетаскивания на обе таблицы, и все работает правильно, пока я не нажму клавишу модификатора (Ctrl, Alt, Shift и т. Д.). С этого момента функция перетаскивания перестает работать.pyqt5 - перетаскивание ключа модификатора перетаскивает

Я уже пытался подклассифицировать таблицу и повторно реализовать события dnd (QDragEnterEvent, QDragMoveEvent, QDropEvent) без успеха. Я также попытался переопределить события мыши с помощью mousePreseEvent, чтобы поймать начальную точку перетаскивания и mouseMoveEvent, чтобы создать перетаскивание с правильным типом mimetype и создать eventFilter, чтобы поймать ключи-модификаторы и отключить их по мере необходимости, но ни один из них не работал.

Использование событий перетаскивания Я вижу, что после нажатия любой из клавиш-модификаторов при запуске движения перетаскивания создается событие перетаскивания, но сразу же создается событие перетаскивания, а dnd останавливается без даже перемещая мышь.

У кого-нибудь есть решение или он знает причину такого поведения?

Прилагаю простой код, созданный с помощью pyuic5 от дизайнера Qt5.7 с двумя 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

Наконец, я нашел причину этой проблемы и не было ничего, связанных с какой-либо из рамок. Это было вызвано программным обеспечением для использования более чем одного компьютера с той же мышью и клавиатурой по сети.

 Смежные вопросы

  • Нет связанных вопросов^_^