问题描述
有什么办法可以改变 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 中的选项,但这应该提供一些可以探索的想法。