由于阿拉伯文是从右到左书写的,因此可以使用以下库:https://github.com/mpcabd/python-arabic-reshaper 和 https://github.com/MeirKriheli/python-bidi
类似这样的代码可以起作用:
# !/usr/bin/python3
from tkinter import *
import arabic_reshaper
from tkinter import messagebox
from bidi.algorithm import get_display
text_to_be_reshaped = "ﺏﺎﻃﻭ"
reshaped_text = arabic_reshaper.reshape(text_to_be_reshaped)
bidi_text = get_display(reshaped_text)
top = Tk()
top.geometry("70x30")
B = Button(top, text = bidi_text)
B.place(x=0,y=0)
top.mainloop()
希望这个答案能够帮助到某些人。
以下是如何为tkinter的Label和Entry小部件添加阿拉伯语支持:
编辑: 此修复仅适用于Linux上的阿拉伯语, 但对于Windows,双向文本支持将由操作系统处理,并且阿拉伯语将正确显示而不需要修复。
你需要安装AwesomeTkinter包 pip install awesometkinter
示例(source):
import tkinter as tk
from awesometkinter.bidirender import add_bidi_support, render_text
root = tk.Tk()
text = 'السلام عليكم'
# text display incorrectly on linux without bidi support
dummyvar = tk.StringVar()
dummyvar.set(text)
tk.Label(root, textvariable=dummyvar, font='any 20').pack()
# uncomment below to set a rendered text to first label
# dummyvar.set(render_text(text))
entry = tk.Entry(root, font='any 20', justify='right')
entry.pack()
lbl = tk.Label(root, font='any 20')
lbl.pack()
# adding bidi support for widgets
add_bidi_support(lbl)
add_bidi_support(entry)
# now there is a new set() and get() methods to set and get text on a widget
entry.set(text)
lbl.set('هذا كتاب adventure شيق')
root.mainloop()
输出:
注意:您可以直接在输入小部件中书写阿拉伯语,并且文本流将从右到左正确显示,字母也将正确连接。entry.set()
不存在。"我们可以使用set()和get()方法在小部件上设置和获取文本" 部分错误,对于输入框小部件没有 set()
方法,标签也没有。 - Delrius Euphoriaatk.add_bidi_support()
中的代码部分是为小部件添加 set() 和 get() 方法,欢迎在 https://github.com/Aboghazala/AwesomeTkinter 上查看代码。 - Mahmoud Elshahat