Python 使用带tkinter的阿拉伯文文本

Python 使用带tkinter的阿拉伯文文本,python,ubuntu,tkinter,utf-8,arabic,Python,Ubuntu,Tkinter,Utf 8,Arabic,我想在python应用程序中使用阿拉伯语,但它不起作用。我尝试了以下方法: #!/usr/bin/env python3 # -*- coding: UTF-8 -*- . . . welcMsg = 'مرحبا' welcome_label = ttk.Label(header, text=welcMsg, font=( "KacstBook", 24)).grid(row=0, column=0, pady=20) 我还

我想在python应用程序中使用阿拉伯语,但它不起作用。我尝试了以下方法:

   #!/usr/bin/env python3
   # -*- coding: UTF-8 -*-
   .
   .
   .
   welcMsg = 'مرحبا'
   welcome_label = ttk.Label(header, text=welcMsg, font=(
   "KacstBook", 24)).grid(row=0, column=0, pady=20)
我还试图补充一点

   welcMsg = welcMsg.encode("windows-1256", "ignore")
但结果总是这样

tkinter条目和文本也会发生这种情况

   searchField = ttk.Entry(tab3, width=50)
   textBox = Text(tab4, width=45, height=15, font=("KacstOffice", 16), selectbackground="yellow",
           selectforeground="black", undo=True, yscrollcommand=text_scroll.set, wrap=WORD)
那么,我还可以尝试处理标签、条目和文本吗


注意:我使用的是Ubuntu18.04 bionic,您只需将此行作为Python文件中的第一行(在代码之前):编码:UTF-8,即可将编码设置为UTF-8--

这是一个代码示例:

# -*- coding: UTF-8 -*-
from Tkinter import *
root = Tk()
root.title('Alram')
root.geometry("1500x600")
mytext= 'ذكرت تقارير' #Arabic text
msg = Message(root, bg="red", text= mytext, justify='right')
msg.config(font=('times', 72, 'bold'))
exit_button = Button(root, width=10, text='Exit', command=root.destroy)
exit_button.pack()
msg.pack(fill=X)
root.mainloop()
以下是原始答案:

Tkinter没有bidi支持(根据tk的源代码),这意味着RTL(从右到左)语言(如阿拉伯语)将无法正确显示,有两个问题:

1-字母将按相反顺序显示

2-字母连接不正确

在windows上正确显示阿拉伯语的原因是,bidi支持由操作系统处理,而在Linux中则不是这样

要在linux上解决此问题,您可以使用软件包,它可以向标签和条目添加bidi支持(也可以在编辑时)

输出:


注意:您可以通过以下方式安装awesometkinter
pip安装awesometkinter

您使用的是什么操作系统?第一个代码片段对我来说很有用,并显示:
,在Ubuntu 20 | Python 3.8上检查这个答案代码不能解决问题实际上我在发布问题之前检查了这个答案,我不认为这是操作系统的问题,因为我可以浏览阿拉伯语网站并在libre中打开阿拉伯语文本文件,而无需任何修改issue@MohabMostafa这个问题会影响Ubuntu 19/20,但不会影响Windows。这就是为什么我认为它可能依赖于操作系统。嗯,我正在搜索它,但是没有多少来源给出一个好的答案…@TheLizzard也不会影响MacOS。。在MacOS Big Sur上运行良好
import tkinter as tk
import awesometkinter as atk
root = tk.Tk()

welcMsg = 'مرحبا'

# text display incorrectly on linux without bidi support
tk.Label(root, text=welcMsg).pack()

entry = tk.Entry(root, justify='right')
entry.pack()

lbl = tk.Label(root)
lbl.pack()

# adding bidi support for widgets
atk.add_bidi_support(lbl)
atk.add_bidi_support(entry)

# Now we have a new set() and get() methods to set and get text on a widget
# these methods added by atk.add_bidi_support() and doesn't exist in standard widgets.
entry.set(welcMsg)
lbl.set(welcMsg)

root.mainloop()