Как удалить и переписать введенное слово (исправление «на лету») в приложении для проверки правописания в Python? - PullRequest
0 голосов
/ 06 апреля 2020


Здравствуйте,
Я создал корректор орфографии для проекта, и в настоящее время я изо всех сил стараюсь заставить его работать в приложении реального времени (на лету)
Под этим я подразумеваю, что Я читаю ввод пользователя (в любом месте ОС Windows - не только в оболочке python) с библиотекой клавиатуры python, а когда пользователь вводит пробел, я проверяю правописание введенного слова.
Если это правильно, программа ничего не делает, но если это неправильно, программа удаляет неправильное слово и перезаписывает правильное.
Я реализовал последнюю функцию удаления и перезаписи с помощью pynput (нажмите и выпустить), но производительность далеко не хорошая.
Это последняя серьезная функциональность, которую я должен реализовать, поэтому любая помощь будет очень полезной.
Пример кода, который я использую, показан ниже.

import keyboard
from pynput.keyboard import Key,Controller

pynput_keyboard = Controller()
word_list = ['one', 'two', 'three'] # we suppose these are the correct words
correct_word = "CORRECT"

string = ""
while True:
    event = keyboard.read_event()
    if (event.event_type == keyboard.KEY_DOWN):
        key_pressed = event.name
        print("Key pressed is {}".format(key_pressed))
        print("String is {}".format(string))
        if (key_pressed == "space"):
            if (string in word_list):
                string = ""
                pass
            else :
                for i in range(len(string) + 1):
                    # print("IN DELETION")
                    pynput_keyboard.press(Key.backspace)
                    pynput_keyboard.release(Key.backspace)

                for i, char in enumerate(correct_word):
                    # print("in rewrite")
                    pynput_keyboard.press(char)
                    pynput_keyboard.release(char)
                pynput_keyboard.press(' ')
                pynput_keyboard.release(' ')
                string=""

        elif (key_pressed in "abcdefghijklmnopqrstuvwxyz"):

            string = ''.join([string, str(key_pressed)])

Есть ли хорошие и эффективные способы сделать это?
Заранее спасибо.


ОБНОВЛЕНИЕ 1
Я а dded пример кода для лучшего понимания и скриншот, показывающий ошибку, которая возникает, если пользователь печатает очень быстро.
enter image description here
Основная проблема заключается в том, что программа задерживается при удалении и записи правильное слово и пользователь накладывает слова, написанные из программы.

...