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

Ubuntu中Tkinter Text组件如何支持波斯语输入?

解决Ubuntu 22.04下Tkinter Text组件波斯语显示异常问题

Tkinter的Text组件对波斯语这类RTL(从右到左)语言的原生支持有限,awesometkinter的add_bidi_support仅适配Entry组件,可通过以下方案解决Text组件的问题:

  1. 安装双向文本处理库
    使用python-bidi处理波斯语的字符顺序,执行安装命令:

    pip install python-bidi
    
  2. 修改代码实现RTL支持
    绑定Text组件的修改事件,自动转换文本为正确的显示顺序,并保持右对齐:

    import tkinter as tk
    from bidi.algorithm import get_display
    
    def handle_bidi_text(event):
        # 关闭修改标记,避免循环触发事件
        event.widget.edit_modified(False)
        content = event.widget.get("1.0", tk.END).strip()
        if content:
            # 转换波斯语为正确的RTL显示格式
            formatted_content = get_display(content)
            # 更新文本内容
            event.widget.delete("1.0", tk.END)
            event.widget.insert(tk.END, formatted_content)
            # 保持光标在RTL输入的正确位置(文本开头)
            event.widget.mark_set(tk.INSERT, "1.0")
        # 确保文本始终右对齐
        event.widget.tag_add('tag-right', '1.0', tk.END)
    
    # 初始化窗口和组件
    root = tk.Tk()
    record_tab = tk.Frame(root)
    record_tab.pack()
    
    description_text = tk.Text(record_tab, width=15, height=5, font=("B Nazanin", 20))
    description_text.tag_config('tag-right', justify='right')
    description_text.grid(row=3, column=0, padx=20, pady=20)
    
    # 绑定事件处理双向文本
    description_text.bind("<<Modified>>", handle_bidi_text)
    
    root.mainloop()
    
  3. 验证效果
    运行代码后输入「سلام」,即可看到正确的RTL显示效果。

注意:确保系统已安装B Nazanin字体,可通过fc-list | grep "B Nazanin"命令检查是否存在,若未安装需先安装对应字体包。

内容的提问来源于stack exchange,提问作者Mohammad Asadi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:07:21