Я пытаюсь реализовать виджет виртуальной клавиатуры. Самый простой способ, который я мог придумать, - это создать экземпляры QKeyEvent и отправить их с помощью QApplication.postEvent() в виджет, находящийся в фокусе.
Во-первых, я пытаюсь обновить исправленный QLineEdit, который у меня есть, поэтому код:
self.pushButton_A.clicked.connect(self.virtualKeyPress)
[...]
def virtualKeyPress(self):
self.keyPress = QKeyEvent(QEvent.KeyPress, Qt.Key_A, Qt.NoModifier)
QApplication.postEvent(self.lineEdit, self.keyPress)
Но экземпляр QLineEdit не будет обновлять свой текст в графическом интерфейсе!
Подсказки? Здоровья и спасибо!
РЕШЕНО: (спасибо HeyYO)
self.pushButton_A.clicked.connect(self.virtualKeyPress)
[...]
def virtualKeyPress(self):
self.keyPress = QKeyEvent(QEvent.KeyPress, Qt.Key_A, Qt.NoModifier, 'A')
QApplication.postEvent(self.lineEdit, self.keyPress)
В моем случае вместо Qt.Key_A я установил этот аргумент равным 0, чтобы я мог подключить все свои кнопки к методу virtualKeyPress. Мне также пришлось установить политику фокуса для всех кнопок на «без фокуса» (сделал это непосредственно в Qt Designer). Окончательный код был следующим:
def virtualKeyPress(self):
self.keyPressed = QString(self.sender().text())
self.keyPress = QKeyEvent(QEvent.KeyPress, 0, Qt.NoModifier, self.keyPressed)
self.focusWidget = QApplication.focusWidget()
QApplication.postEvent(self.focusWidget, self.keyPress)