在 tkinter 中输入希腊字符

Posted

技术标签:

【中文标题】在 tkinter 中输入希腊字符【英文标题】:Typing Greek characters in tkinter 【发布时间】:2020-12-11 23:21:54 【问题描述】:

我正在尝试编写一个界面(在 Python 3.8 中,使用 tkinter)来接受希腊语文本(在 Windows 10 中使用希腊语多调键盘键入)。但是,EntryText 不会接受所有键入的希腊字符:可以单独键入希腊字母,但如果我尝试键入除尖音以外的任何带有变音符号的字母,则会显示 ? 而不是性格。 (我认为 tkinter 接受“希腊语和科普特语”中的字符,但不接受“希腊语扩展”Unicode 块中的字符。)我知道 tkinter 可以显示这些字符,因为它们在被程序插入时显示得很好(例如 @987654324 @ 插入 但只需使用键盘的快捷键键入该字符即可插入 ?)。我需要做什么才能让 tkinter 识别键入的希腊字符? (我还尝试通过添加 TextInstance.bind('[h', lambda *ignored: TextInstance.insert(tkinter.INSERT, 'ῆ'))每个字符及其快捷键来重新绑定键盘快捷键;这在英文键盘中有效(尽管也插入了激活事件的字符),但在字母键上的希腊 Polytonic 键盘绑定根本没有激活。)

【问题讨论】:

记录不起作用的字符串的代码点可能会有所帮助([ord(c) for c in not_working_string] 另外,也许尝试使用不同的字体。 【参考方案1】:

您可以通过将'<Key>'(即,按下键盘上的任何键)绑定到一个函数来执行此操作,然后使用event.keycode(对于任何给定的键没有相同的值)检查按下的键无论您的计算机设置使用什么键盘),然后插入预期的字符。但是,对于多键键盘快捷键,您必须跟踪以前的击键,因为传递给函数的事件对象可能只包括最后一个:即使您绑定,例如 widget.bind('<Control-Key-c>', some_function),传递给函数的事件将包括c 但不包括控制键——至少在event.keycode 中,当键盘不能与 tkinter 一起使用时,事件的其他属性不一定可靠或信息丰富。要将/a 绑定到(带有平滑呼吸和重音标记的小写字母),我将每个'<Key>' 事件添加到列表中,并将函数设置为仅当正确的组合 键被按下:

import tkinter as tk

root=tk.Tk()
e=tk.Entry(root); e.pack()
keyspressed=[]
def pressKey(event,widget):
    keyspressed.append(event)
    print(event.keycode, event.char, "pressed.")

    if len(keyspressed)>1: #to avoid an index-out-of-range error if only one key has been pressed so far
        #if the last two keys were / and A, insert ἄ i.e. /u1f04
        if keyspressed[-2].keycode==191 and keyspressed[-2].char!='/' and event.keycode==65:
            #65 is A; 191 is /; the char check is to make sure the / is not being used
            # to type / on a different keyboard.
            widget.insert(tk.INSERT,'\u1f04') #insert the character
            return 'break' #this stops ? from being typed

e.bind("<Key>",lambda event: pressKey(event, e))

root.mainloop()

【讨论】:

以上是关于在 tkinter 中输入希腊字符的主要内容,如果未能解决你的问题,请参考以下文章

Python怎么将tkinter 输入框中输入的字符串内容转换为 整数类型?

Python3 Tkinter基础 Entry show textvariable 密码输入框 输入字符 显示 特殊字符

Tkinter 检查输入框是不是为空

[Tkinter 教程07] Entry 控件

tkinter Entry 小部件中的可见文本变量

Tkinter 组件