Python Tkinter ttk Полоса прокрутки на текстовом виджете не масштабируется - PullRequest
0 голосов
/ 15 декабря 2018

Просто изучаю tkinter и нахожу странное поведение.Моя вертикальная полоса прокрутки светло-серая и содержит темно-серый прямоугольник, который перемещается вверх и вниз по полосе, чтобы показать прогресс. Когда этот код выполняется впервые, темно-серый прямоугольник прогресса отсутствует.Когда я нажимаю стрелку вниз индикатора выполнения, появляется темно-серая рамка, но она остается в верхней части полосы прокрутки, пока я не прокручиваю до конца текста.Только тогда полоса прокрутки, кажется, определяет объем текста в блоке, темно-серый прямоугольник прогресса переходит на нижнюю часть полосы прокрутки и с этого момента работает правильно.Я на машине с Windows и выполняю это в Jupyter Notebook, используя python 3.

Есть ли способ инициализации полосы прокрутки, чтобы он знал, с каким объемом текста он имеет дело?

 from tkinter import *
 from tkinter import ttk

 root = Tk()
 root.title('Twitter Timeline')

 f = ttk.Frame(root, padding = '3 3 12 12')
 f.grid(column=0, row=0, sticky=(N,W,E,S))
 root.columnconfigure(0, weight=1)
 root.rowconfigure(0, weight=1)

 t = Text(f, width= 100,  wrap='word')
 t.grid(column = 0, row = 2, sticky="nsew")
 t.insert(INSERT, "Begin " + "This is a test " * 800 + " END")

 s = ttk.Scrollbar(root, orient=VERTICAL, command=t.yview)
 s.grid(column=1, row=0, sticky='nsew')
 t['yscrollcommand'] = s.set

 for child in f.winfo_children(): 
     child.grid_configure(padx=5, pady=5)

 root.mainloop()

1 Ответ

0 голосов
/ 15 декабря 2018

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

t.insert(INSERT, "Begin " + "This is a test \n" * 800 + " END")

, и он будет работать как шарм.

Похоже, что это проблема с grid(), так как она работает нормально, если вместо нее вы используете pack(), также с одной длинной строкой ... Я не уверен, почему.

...