带有阿拉伯文本的Tkinter标签

3

文本不正常 :'(

有没有办法使阿拉伯文本看起来完全正确: 下面的示例应该看起来像“باطو”


1
可能是TKinter中的阿拉伯文本的重复问题。 - DYZ
2个回答

3

由于阿拉伯文是从右到左书写的,因此可以使用以下库:https://github.com/mpcabd/python-arabic-reshaperhttps://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()

enter image description here


终于有一个可行的答案了!谢谢。 - Sdgh17

1

希望这个答案能够帮助到某些人。

以下是如何为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()

输出:

example

注意:您可以直接在输入小部件中书写阿拉伯语,并且文本流将从右到左正确显示,字母也将正确连接。

阿拉伯语默认支持文本而不是输入。此外,entry.set()不存在。"我们可以使用set()和get()方法在小部件上设置和获取文本" 部分错误,对于输入框小部件没有 set() 方法,标签也没有。 - Delrius Euphoria
atk.add_bidi_support() 中的代码部分是为小部件添加 set() 和 get() 方法,欢迎在 https://github.com/Aboghazala/AwesomeTkinter 上查看代码。 - Mahmoud Elshahat
我不明白你所说的“阿拉伯语默认支持文本而非输入法”的意思,请进一步解释。 - Mahmoud Elshahat
@CoolCloud 这不是正确的,tkinter在Linux上没有双向文本支持,这意味着阿拉伯字母将以相反的顺序显示而且不会连接,但在Windows上,双向文本支持由操作系统处理,阿拉伯语会正确地显示。如果您查看上面的屏幕截图,第一个小部件是一个标签,它显示阿拉伯语错误,但其他小部件则正确显示阿拉伯语。 - Mahmoud Elshahat
1
我不质疑你的所有权。我的意思是默认情况下,阿拉伯语无法工作,也许使用那个库可以解决问题。对于任何误解,我很抱歉 :D - Delrius Euphoria
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接