Слово, уже преобразованное в Unicode, также рассматривается как новый пользовательский ввод и преобразует его снова и снова. - PullRequest
0 голосов
/ 05 января 2019

Проект, над которым я работаю, состоит в том, чтобы создать инструмент ввода на местном языке, используя символы Unicode. Я пытаюсь развить, когда программа работает, где бы ни было набрано слово, оно преобразуется в соответствующее слово Unicode. (оно идентифицирует слово после нажатия клавиши «пробел»)

Я обнаружил, что если Ctrl + shift + u нажать и отпустить, то вводится значение Unicode, а затем пробел преобразуется в соответствующий символ Unicode.

например.

1) Ctrl+shift+u
2) 0d96
3) space
    ->> ඖ

Итак, я разработал эту функцию с pyautogui , которая помогает нажимать клавиши при необходимости.

если необходимо, «слово» ниже передает значение типа u0dbbu0ddd (не \ u0dbb \ u0ddd )

import pyautogui

def type_unicode(word,lenth):
#word - converted unicode values
#length - length of the user typed word


#to erase user typed word
    for x in range(lenth+1):
        pyautogui.press('backspace')


    for x in range(0,len(word),5):
        # to  press ctrl+shift+u
        pyautogui.hotkey('ctrl', 'shift', 'u')

        #Unicode letters for each word
        pyautogui.typewrite(word[x+1:x+5])

    pyautogui.press('space')

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

Я пытаюсь использовать флаг здесь. Но все решения, которые я принимал, были бесполезны

1 Ответ

0 голосов
/ 08 августа 2019

Вы вызываете pyautogui.press ('space') в теле вашей программы, поэтому, даже если пользователь не печатает пробел, программа видит его как пробел.

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

Я предполагаю, что ваша функция обработки пространства называется space_handler.

def space_handler(a, b, c):

Давайте добавим глобальную переменную в space_handler.

in_user_input = True

def space_handler(a, b, c)
    if not in_user_input:
        return False
    (....regular space handling)

Кроме того, места для изменения in_user_input:

    in_user_input = False
    for x in range(0,len(word),5):
        # to  press ctrl+shift+u
        pyautogui.hotkey('ctrl', 'shift', 'u')

        #Unicode letters for each word
        pyautogui.typewrite(word[x+1:x+5])

    pyautogui.press('space')
    in_user_input = True

Похоже, вам просто нужен in_user_input вокруг pyautogui.press ('пробел'), но если кто-то вставит юникод 0020 (пробел), это потенциально означает случай с краем. Могут быть и другие крайние случаи. Но я думаю, что это должно работать в основном.

Надеюсь, это поможет, или, что лучше, вы уже все выяснили.

...