Я работаю над регистратором с модулем pynput и клавиатурой (модуль клавиатуры для чтения пользовательского ввода и pynput для перезаписи исправленного текста), и я создал окно PyQt с двумя метками и двумя кнопками.
Пользователь вводит текст, и если он верен, ничего не происходит, в противном случае набранное слово удаляется (с помощью нажатия pynput (Key.backspace)), и после его выбора набирается новое слово, нажав одну из двух кнопок.
Проблема, с которой я сталкиваюсь, заключается в том, что когда пользователь нажимает кнопку, текстовый курсор теряет фокус с позиции, в которой было набрано исходное слово, поэтому pynput не может удалить неправильное слово и написать исправленное в нужном месте.
Я попытался воссоздать проблему (что-то не работает, как ожидалось - извините), но вы можете понять это.
import pynput
import keyboard
from pynput.keyboard import Key, Controller
from PyQt5 import QtCore, QtWidgets, uic
import sys
import time
pynput_keyboard = Controller()
class Ui(QtWidgets.QMainWindow):
def __init__(self):
super(Ui, self).__init__()
uic.loadUi("untitled.ui", self)
self.string = ""
self.pushButton.clicked.connect(self.change_word)
self.pushButton_2.clicked.connect(self.change_word)
# this will activate the window
self.activateWindow()
self.show()
def change_word(self):
if (self.sender().text() == "B1"):
pass
elif (self.sender().text() == "B2"):
for i in range(len(self.label.text())+1):
pynput_keyboard.press(Key.backspace)
pynput_keyboard.release(Key.backspace)
for i, char in enumerate(self.label_2.text()):
pynput_keyboard.press(char)
pynput_keyboard.release(char)
def monitor(window):
while True:
event = keyboard.read_event()
if event.event_type == keyboard.KEY_DOWN:
if event.name == "space":
window.label.setText(window.string)
window.label_2.setText(window.string + "_changed")
window.string = ""
elif event.name in "abcdefghijklmnopqrstuvwxyz":
window.string += event.name
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
window = Ui()
monitor(window)
sys.exit(app.exec_())
gui показано выше.
Я думал о некоторых решениях, таких как сохранение в переменной позиции текстового курсора прямо перед нажатием кнопки, но не смог ее решить.
! Я пытался воссоздать его как можно лучше.
Заранее спасибо!