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

如何在PySimpleGUI中设置波斯语菜单为RTL方向?

PySimpleGUI 波斯语菜单 RTL(从右到左)实现方案

PySimpleGUI本身没有内置全局RTL开关,但可以借助底层tkinter的API实现波斯语菜单的从右到左布局,以下是具体方案:

核心实现步骤

1. 配置波斯语字体

确保系统安装了支持波斯语的字体(如IRANSans、Vazirmatn),在代码中指定全局字体:

font = ('IRANSans', 12)  # 替换为你系统中已安装的波斯语字体

2. 定义波斯语菜单结构

直接用波斯语编写菜单项文本:

menu_def = [
    ['فایل', ['باز کردن', 'ذخیره', 'خروج']],
    ['ویرایش', ['برش', 'کپی', 'چسباندن']],
    ['راهنما', ['درباره ما']]
]

3. 创建窗口并设置RTL属性

窗口创建时需添加finalize=True,以便直接访问底层tkinter组件,然后为菜单设置RTL方向:

import PySimpleGUI as sg
import tkinter as tk

sg.theme('LightBlue')
layout = [
    [sg.Menu(menu_def, font=font, key='-MAIN_MENU-')],
    [sg.Text('محتویات پنجره', font=font, justification='right')],
    [sg.Button('خروج', font=font)]
]

window = sg.Window('پنجره فارسی', layout, font=font, finalize=True)

# 获取底层tkinter菜单对象,遍历设置RTL方向
main_menu = window['-MAIN_MENU-'].Widget
for sub_menu in main_menu.winfo_children():
    if isinstance(sub_menu, tk.Menu):
        sub_menu.config(direction='rtl')

# 设置全局文本右对齐
window.TKroot.option_add('*justify', 'right')

4. 运行事件循环

保留常规的PySimpleGUI事件循环逻辑即可:

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == 'خروج':
        break

window.close()

注意事项

  • 不同操作系统对RTL布局的渲染可能存在差异,建议在目标平台上测试调整。
  • 避免在波斯语文本中混合LTR(从左到右)字符,否则可能导致排版错乱。
  • 如果需要更全局的样式控制,可以结合tkinter的ttk.Style配置:
from tkinter import ttk
style = ttk.Style()
style.configure('TMenu', direction='rtl')

内容的提问来源于stack exchange,提问作者S.Katuzian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:45:00