更改 tkinter 文本小部件中的默认输入语言

问题描述

有什么办法可以改变 tkinter 中的认输入语言吗?

代码如下:

from tkinter import *

root = Tk()

text = Text(root,width = 65,height = 20,font = "consolas 14")
text.pack()

mainloop()

在这里,当我在文本小部件中输入一些文本时,它是用英语输入的。

我想要的是用其他语言输入文本。

有没有办法在 tkinter 中实现这一点?

如果有人能帮助我就好了。

解决方法

在我的 MacOS PC 英式键盘上,我可以使用各种组合键来获取德语和法语字符。 Alt-a:å
Alt e 后跟 e:é
Alt u 后跟 o: ö 或 u: ü 加 a: ä 加 A: Ä
Alt i 后跟 a: â
第 1 步是对此进行试验。

第二个选项如果只需要几个字符,将它们映射到例如F 键

import tkinter as tk

root = tk.Tk()

text = tk.Text( root,width = 50,height = 20,font = ( 'Arial',20 ) )
text.grid()

key_map =  { 'F5': 'ü','F6': 'ö','F13': 'ß','F14': 'á','F15': 'é' }
# Map the function keys to the characters required.
# f5,f6,f13,etc return the mapped characters.
# The other F keys are used for system activities from my keyboard.

def do_key( event ):
    char = key_map.get( event.keysym )
    if char:
        text.insert( tk.INSERT,char )
        return 'break'  # Stops the event being passed to the text box.

text.bind( '<KeyPress>',do_key )

root.mainloop()

第三个选项 更彻底的方法可能是打开第二个“键盘”窗口,该窗口可以将字符发送到文本框。

import tkinter as tk

root = tk.Tk()

text = tk.Text( root,'F15': 'é' }

def make_keys( char ):
    def do_key():
        text.insert( tk.INSERT,char )
        return 'break'
    return do_key

def get_key( event ):
    master = tk.Toplevel( root )
    for col,v in enumerate( key_map.values()):
        tk.Button( master,text = v,command = make_keys( v )).grid( row = 0,column = col )
    return 'break'

text.bind( '<KeyPress-F5>',get_key )
# Press F5 in the text box to open the keyboard.

root.mainloop()

使用此选项可以永久打开额外的窗口或 GUI 中的更多框架而不是单独的窗口。

可能有特定于操作系统的方法可以更巧妙地执行此操作,或者我不知道 tkinter 中的选项,但这应该提供一些可以探索的想法。