python 创建Tkinter应用程序以支持波斯语和正确的RTL显示

w8ntj3qf  于 2024-01-05  发布在  Python
关注(0)|答案(1)|浏览(154)

我正在开发一个Tkinter应用程序,我需要支持波斯语/波斯语。标题显示正确,但其余的小部件不显示预期的波斯语文本。我希望文本是从右到左(RTL),波斯语字母应该互相粘在一起。
下面是我的代码的简化版本:

  1. import tkinter as tk
  2. from tkinter import messagebox
  3. class InvoiceApp:
  4. def __init__(self, master):
  5. self.master = master
  6. self.master.title("نرم‌افزار صورتحساب")
  7. # لیست محصولات
  8. self.products = []
  9. # ایجاد ویجت‌ها
  10. self.product_label = tk.Label(master, text='نام محصول:', justify='right')
  11. self.product_entry = tk.Entry(master)
  12. self.price_label = tk.Label(master, text="قیمت:")
  13. self.price_entry = tk.Entry(master)
  14. self.add_button = tk.Button(master, text="افزودن به صورتحساب", command=self.add_to_invoice, justify='right')
  15. self.create_invoice_button = tk.Button(master, text="ساخت صورتحساب", command=self.create_invoice)
  16. self.send_email_button = tk.Button(master, text="ارسال ایمیل", command=self.send_email)
  17. def add_to_invoice(self):
  18. # افزودن محصول به لیست
  19. pass
  20. def create_invoice(self):
  21. # ساخت صورتحساب
  22. pass
  23. def send_email(self):
  24. # ارسال ایمیل
  25. pass
  26. if __name__ == "__main__":
  27. root = tk.Tk()
  28. app = InvoiceApp(root)
  29. root.mainloop()

字符串
x1c 0d1x我已经尝试设置字体和锚属性,但它似乎不像预期的那样工作。有人能指导我如何配置Tkinter小部件,以正确显示波斯语文本,从右到左,字母粘在一起?
任何帮助将不胜感激!谢谢。

sy5wg1nm

sy5wg1nm1#

我希望文本是从右到左(RTL),波斯文字母应该坚持彼此。
问题可以修复。
您缺少布局管理器,例如place()pack()grid()
所以,我使用了grid()
为两个Entry小工具添加关键字justify='right'
顺便说一句,你还没有提到Text小部件。实际上,我把它留给你。
片段:

  1. class InvoiceApp:
  2. def __init__(self, master):
  3. self.master = master
  4. self.master.title("نرم‌افزار صورتحساب")
  5. # لیست محصولات
  6. self.products = []
  7. # ایجاد ویجت‌ها
  8. self.product_label = tk.Label(master, text='نام محصول:', justify='right')
  9. self.product_label.grid(row=0, column=0, sticky='w')
  10. self.product_entry = tk.Entry(master, justify='right')
  11. self.product_entry.grid(row=0, column=1, padx=15, sticky='n')
  12. self.price_label = tk.Label(master, text="قیمت:", justify='right')
  13. self.price_label.grid(row=0, column=2, sticky='n')
  14. self.price_entry = tk.Entry(master, justify='right')
  15. self.price_entry.grid(row=0, column=3, padx=15, sticky='n')
  16. self.add_button = tk.Button(master, text="افزودن به صورتحساب", command=self.add_to_invoice, justify='right')
  17. self.add_button.grid(row=1, column=1, columnspan=3, pady=5, sticky='n')
  18. self.create_invoice_button = tk.Button(master, text="ساخت صورتحساب", command=self.create_invoice)
  19. self.create_invoice_button.grid(row=2, column=1, columnspan=3, pady=5, sticky='n')
  20. self.send_email_button = tk.Button(master, text="ارسال ایمیل", command=self.send_email)
  21. self.send_email_button.grid(row=3, column=1, columnspan=3, pady=5, sticky='n')
  22. #st = ScrolledText(master, width=50, height=10)
  23. #st.grid(row=4, column=1, columnspan=3, pady=5, sticky='n')
  24. self.text = tk.Text(master, font=('Tahoma',8))
  25. self.text.tag_configure('tag-right', justify='right')
  26. self.text.insert('end', 'This is a Text widget demo', 'tag-right')
  27. self.text.grid(row=4, column=1, columnspan=3, pady=5, sticky='n')
  28. scrl = tk.Scrollbar(master, command=self.text.yview)
  29. self.text.config(yscrollcommand=scrl.set)
  30. scrl.grid(row=4, column=4, sticky='ns')

字符串
截图:


的数据

展开查看全部

相关问题