изменить направление текста справа налево

Я использую Tkinter и пытаюсь изменить направление текстового виджета (при вводе пользователем - это будет RTL) для таких языков, как иврит и арабский.

Как я могу разрешить ctrl + shift, чтобы направление текста менялось rtl и ltr?

Или есть другой способ сделать это?


person Omri    schedule 02.11.2018    source источник
comment
К сожалению, Tkinter не поддерживает RTL. Вы можете попробовать создать функциональность RTL, используя методы реверсивной строки и заставив ваши виджеты привязываться к западной мысли.   -  person Mike - SMT    schedule 02.11.2018
comment
спасибо @Mike-SMT   -  person Omri    schedule 02.11.2018


Ответы (1)


У меня есть пример работы для вас.

Здесь я создаю 2 ярлыка на основе списка. Затем мы можем изменить формат текста с помощью метода, который перевернет текст. Я чувствую, что он должен переключиться обратно в LTR и вернуться влево, но эта часть по какой-то причине не работает. Я буду продолжать работать над этим, но если кто-то знает, почему это так, дайте мне знать.

import tkinter as tk


class Example(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.columnconfigure(0, weight=1)
        self.testing_frame = tk.Frame(self)
        self.testing_frame.grid(row=0, column=0, stick="nsew")
        self.testing_frame.columnconfigure(0, weight=1)

        self.list_of_items = ["Word to be reversed!", "Some other words to be reversed!"]
        self.list_of_labels = []
        for ndex, item in enumerate(self.list_of_items):
            self.list_of_labels.append([tk.Label(self.testing_frame, text=item, anchor="w"), "ltr"])
            self.list_of_labels[ndex][0].grid(row=ndex, column=0, sticky="ew")

        self.bind("<Control-Shift_L>", self.flip)

    def flip(self, event):
        for item in self.list_of_labels:
            if item[1] == "ltr":
                item[0].config(text=item[0]["text"][::-1], anchor="e")
                item[0].grid(sticky="ew")
                item[1] = "rtl"
            else:
                item[0].config(text=item[0]["text"][::-1], anchor="w")
                item[0].grid(sticky="ew")
                item[1] = "ltr"


if __name__ == "__main__":
    Example().mainloop()

Результаты:

введите здесь описание изображения

введите здесь описание изображения

Теперь с весами!

введите здесь описание изображения

введите здесь описание изображения

person Mike - SMT    schedule 02.11.2018