Как динамически обернуть текст в метку tkinter? - PullRequest
0 голосов
/ 20 июня 2020

Текст в метке в tkinter может быть разбит на несколько строк при превышении лимита, указанного в параметре wraplength.

Однако это количество пикселей, но вместо этого я бы хотел чтобы использовать для этого полную ширину окна, а длина обтекания должна изменяться всякий раз, когда пользователь изменяет размер окна.

Одним из подходов может быть обновление параметра вручную примерно так:

Есть ли другой способ сделать это, возможно, параметр, о котором я не знаю?

1 Ответ

3 голосов
/ 20 июня 2020

Вам придется обновлять длину оболочки каждый раз, когда изменяется размер окна. Вы можете определить, когда размер окна изменяется с помощью события "<Configure>".

my_label.bind('<Configure>', update_wraplength)

Помните, что это работает, только если вы настроили метку для расширения на все доступное пространство.

Давайте посмотрим если вы понимаете этот код:

import Tkinter as tk

class WrappingLabel(tk.Label):
    '''a type of Label that automatically adjusts the wrap to the size'''
    def __init__(self, master=None, **kwargs):
        tk.Label.__init__(self, master, **kwargs)
        self.bind('<Configure>', lambda e: self.config(wraplength=self.winfo_width()))

def main():
    root = tk.Tk()
    root.geometry('200x200')
    win = WrappingLabel(root, text="As in, you have a line of text in a Tkinter window, a Label. As the user drags the window narrower, the text remains unchanged until the window width means that the text gets cut off, at which point the text should wrap.")
    win.pack(expand=True, fill=tk.X)
    root.mainloop()

if __name__ == '__main__':
    main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...