You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter Entry组件输入印地语/梵语显示问号问题求助

解决Tkinter输入框显示梵语/印地语为问号的问题

问题根源在于你使用的Times字体不包含梵语(天城文)字符集,Tkinter无法渲染这些字符时就会显示问号。只需为输入框和列表框指定支持天城文的字体即可解决。

以下是修复后的完整代码:

from tkinter import *

lst = ['रामायणसारः', 'देवयाज्ञिकपद्धतिः', 'तर्कसङ्ग्रहः',]

def check_input(event):
    value = event.widget.get()

    if value == '':
        data = lst
    else:
        data = []
        for item in lst:
            # 天城文无大小写区分,直接匹配原字符
            if value in item:
                data.append(item)
    update(data)

def update(data):
    menu.delete(0, END)
    for value in data:
        menu.insert(END, value)

def fillout(event):
    combo_box.delete(0, END)
    combo_box.insert(0, menu.get(menu.curselection()))

# 初始化主窗口
root = Tk()
root.geometry('600x400')
root.title('梵语联想输入框')

# 指定支持天城文的字体,可根据系统选择:Noto Sans Devanagari(跨平台)、Mangal(Windows默认)、Sanskrit 2003
devanagari_font = ("Noto Sans Devanagari", 12)

combo_box = Entry(root, font=devanagari_font)
combo_box.place(relx=0.20, rely=0.4, relwidth=0.45, relheight=0.1)
combo_box.bind('<KeyRelease>', check_input)

menu = Listbox(root, font=devanagari_font)
menu.place(relx=0.20, rely=0.5, relwidth=0.45, relheight=0.1)
menu.bind("<<ListboxSelect>>", fillout)

update(lst)

root.mainloop()

关键修改说明:

  • 字体替换:将原Times字体替换为支持天城文的字体,若系统没有对应字体需先安装。
  • 移除冗余转换:梵语无大小写概念,删除原代码中多余的lower()转换,直接匹配原字符。
  • 补全窗口代码:原代码缺失主窗口初始化和主循环,已补全确保代码可正常运行。

内容的提问来源于stack exchange,提问作者Pushpak Mangal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:45:57