Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当Kivy TextInput获得焦点时,如何激活windows上的IME选择面板_Python_Windows_User Interface_Kivy_Ime - Fatal编程技术网

Python 当Kivy TextInput获得焦点时,如何激活windows上的IME选择面板

Python 当Kivy TextInput获得焦点时,如何激活windows上的IME选择面板,python,windows,user-interface,kivy,ime,Python,Windows,User Interface,Kivy,Ime,我的操作系统是windows10中文版。对于输入汉字,我使用输入法选择单词,如下所示: 但在Kivy应用程序上,Textinput小部件无法激活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

我的操作系统是windows10中文版。对于输入汉字,我使用输入法选择单词,如下所示:

但在Kivy应用程序上,Textinput小部件无法激活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相关的页面都是关于移动设备的,而不是windows


请帮助。

最后,我更改了SDL2的源代码,并编译了一个新的dll来修复它。当然,这不是一个好的解决方案,但我找到的唯一解决方案

  • 在此处下载SDL2源代码:

  • 找到名为“SDL_windowskeyboard.c”的文件,打开它,添加宏定义:

  • 重建它,确保选择正确的平台(win32或x64),然后复制生成的dll以覆盖原始dll。在我的项目中,sdl包位于venv环境“venv\share\sdl2\bin”中


  • 到目前为止,我找到的唯一解决方案是更改SDL2.dll的源代码,并编译一个新的源代码。这对我来说不是一个好的选择,因为我不熟悉C++堆栈。