我正在从事的项目是使用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。这无休止地发生。
我正在尝试在这里使用标志。但是我所做的每一个决定都没有用
答案 0 :(得分:1)
您正在程序主体中调用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
似乎您只需要在pyautogui.press('space')周围输入in_user_input,但如果有人在unicode 0020(空格)中输入,则可能是一个小问题。可能还有其他情况。但是我认为这应该最有效。
希望这对您有所帮助,或者更好,您已经知道了。