Python пишущий символ «вместо выключенного» и «answerear найден, но не понятен для меня, пожалуйста, попробуйте объяснить это - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь написать скрипт, который пишет скрипт, который пишет скрипт и так далее. Я использовал модуль pyautogui для этого. Проблема в том, что когда я пытаюсь распечатать символы "," он пишет символ Ä. Это мой сценарий, и я использую шведскую клавиатуру:

import pyautogui
#command + n creates a new file in python it is the same as inputting ctrl + n
pyautogui.hotkey("command","n")
pyautogui.typewrite("import pyautogui \npyautogui.hotkey('command','n')")

Я нашел похожий вопрос с ответом в stackoverflow, но они говорят, что они "возились", чтобы заставить его работать. Но я не на том уровне, который может понять, что они сделали, чтобы сделать эту работу, поэтому мой вопрос:

Может кто-нибудь попытаться объяснить, как заставить писать работать с моей шведской клавиатурой?

1 Ответ

0 голосов
/ 27 июня 2018

Есть много проблем с раскладками клавиатуры в pyautogui (если не используется английская раскладка по умолчанию)

Вы можете попробовать одно из следующих:

  1. Если вы работаете в Windows: Загрузить раскладку клавиатуры
win32api.LoadKeyboardLayout
int = LoadKeyboardLayout(KLID, Flags)
  1. Вы можете повозиться вокруг в _pyautogui_win.py
    if key == '\\':
        ctypes.windll.user32.keybd_event(0x11, 0, 0, 0) # should be left control
        ctypes.windll.user32.keybd_event(0x12, 0, 0, 0) # should be alt
        ctypes.windll.user32.keybd_event(0xDB, 0, 0, 0) # should be alt ß
        ctypes.windll.user32.keybd_event(0x11, 0, KEYEVENTF_KEYUP, 0)
        ctypes.windll.user32.keybd_event(0x12, 0, KEYEVENTF_KEYUP, 0)
        ctypes.windll.user32.keybd_event(0xDB, 0, KEYEVENTF_KEYUP, 0)
        return
  1. Еще одно решение для Linux и Mac:

В Mac и Linux есть возможность вводить символы юникода, используя их шестнадцатеричные коды. Об этом есть статья в Википедии. Я пишу свою программу для Mac, поэтому я включил шестнадцатеричный ввод Unicode в настройках клавиатуры и написал следующий код:

def type_unicode(word):
    for c in word:
        c = '%04x' % ord(c)
        pyautogui.keyDown('optionleft')
        pyautogui.typewrite(c)
        pyautogui.keyUp('optionleft')
...