Как активировать панель выбора IME в Windows, когда текстовый ввод Kivy получил фокус

#python #windows #user-interface #kivy #ime

#python #Windows #пользовательский интерфейс #kivy #ime

Вопрос:

Моя ОС — китайская версия windows10. для ввода китайского символа я использую IME для выбора word, например: Ввод на странице Google

но в приложении Kivy виджет ввода текста не может активировать панель выбора IME. например, когда я запускаю демонстрационную версию входа из Kivy:

 from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput


class LoginScreen(GridLayout):

    def __init__(self, **kwargs):
        super(LoginScreen, self).__init__(**kwargs)
        self.cols = 2
        self.add_widget(Label(text='User Name'))
        self.username = TextInput(multiline=False)
        self.add_widget(self.username)
        self.add_widget(Label(text='password'))
        self.password = TextInput(password=True, multiline=False)
        self.add_widget(self.password)


class MyApp(App):

    def build(self):
        return LoginScreen()


if __name__ == '__main__':
    MyApp().run()
  

Экран приложения:

Ввод в приложении Kivy

Нет всплывающего окна панели выбора IME. Чего я ожидаю, так это:

Ожидаемый ввод в приложении Kivy

Я искал документ с домашней страницы Kivy, все страницы, связанные с IME, относятся к мобильному устройству, а не к Windows.

Пожалуйста, помогите.

Комментарии:

1. До сих пор единственным решением, которое я нашел, является изменение исходного кода SDL2.dll , и скомпилируйте новый. Это не очень хороший выбор для меня, потому что я не знаком со стеком c .

Ответ №1:

Наконец, я изменяю исходный код SDL2 и компилирую новую dll, чтобы исправить это. конечно, это не очень хорошее решение, но единственное, что я нашел.

  1. загрузите исходный код SDL2 здесь: libsdl.org

  2. найдите файл с именем «SDL_windowskeyboard.c», откройте его, добавьте определение макроса: измените исходный файл SDL2

  3. перестройте его, убедитесь, что выбрали правильную платформу (win32 или x64), затем скопируйте сгенерированную dll, чтобы перезаписать исходную. В моем проекте пакет sdl находится в среде venv «venv share sdl2 bin»