【问题标题】:The word already converted to Unicode is also considered as a new user input and is converted again and again已经转换为 Unicode 的单词也被认为是新的用户输入,并被一次又一次地转换
【发布时间】:2019-05-31 17:18:15
【问题描述】:

我正在进行的项目是一个使用 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。这无休止地发生。

我尝试了一个标志,但我无法解决它。

【问题讨论】:

  • 您能提供更多关于 pyautogui 方法的信息吗?
  • 本文档提供了所有必需的详细信息。 pyautogui.readthedocs.io/en/latest/keyboard.html
  • 我认为这种方法更好。但如果有比这更好的方法,请提出建议。
  • 为了更好地理解您的问题,可能有必要了解脚本的整个代码以及您使用该代码的环境,而不仅仅是函数。该函数在何处、何时以及如何被调用?如何使用特殊的键序列,例如"[b][s][backspace][backspace]" 在转换过程结束时发出(在 [space] 之前),然后可以将其识别为 autogui 而不是用户输入的单词,以便跳过使用函数已经转换的单词?

标签: python-2.7 ubuntu unicode pyautogui


【解决方案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(一个空格),这可能是一个平均边缘情况。可能还有其他边缘情况。但我认为这应该主要工作。

希望这会有所帮助,或者更好的是,您已经想通了。

【讨论】:

    猜你喜欢
    • 2016-08-19
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 2013-11-04
    • 2015-01-26
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    相关资源
    最近更新 更多