В Tkinter как создать полосу прокрутки подстраиваемого размера?
Пишу приложение, используя библиотеку Tkinter языка Python. В созданном окне есть фрейм, в нем - текстовое поле и под ним 2 кнопки. Необходимо слева расположить полосу прокрутки бегунка так, чтобы ее размер соответствовал заданным параметрам текстового поля.
Пока получилось только создать полосу, которая - в силу первоначального (при запуске программы) отсутствия текста в поле - подстраивает поле под себя (уменьшает) и вертикально встает по его центру (делит текстовую область на 2 половины).
Как исправить досадное упущение?
# рамка, где будет поле для вопросов пользователя
frame_question_answer = tk.Frame(
master=window,
relief=tk.RIDGE,
borderwidth=5
)
# Данная область предназначена для написания вопросов
text_box_question = tk.Text(
master=frame_question_answer,
width=67,
height=5,
bg='#EBF1F2',
fg='black'
)
# ...
# создаем полосу прокрутки текстовой области
scrollbar_question = tk.Scrollbar(text_box_question,
# frame_question_answer,
orient='vertical',
command=text_box_question.yview # первая привязка
)
scrollbar_question.grid(sticky='e')
# вторая привязка
text_box_question.configure(yscrollcommand=scrollbar_question.set)
Ответы (1 шт):
Просто для полосы прокрутки и текстового поля, когда размещаете их, надо указать из ряд и столбец. Также растянуть текстовое поле во все стороны sticky='news', а полосу прокрутки достаточно только по вертикали sticky='ns'. И оба элемента размещать, конечно, в их общем фрейме.
Как-то так:
import tkinter as tk
window = tk.Tk()
# рамка, где будет поле для вопросов пользователя
frame_question_answer = tk.Frame(
master=window,
relief=tk.RIDGE,
borderwidth=5
)
frame_question_answer.pack(fill=tk.BOTH, expand=True) # фрейм размещаем так чтобы заполнял всё пространство
# Данная область предназначена для написания вопросов
text_box_question = tk.Text(
master=frame_question_answer,
width=67,
height=5,
bg='#EBF1F2',
fg='black'
)
text_box_question.grid(row=0, column=1, sticky='news')
# создаем полосу прокрутки текстовой области
scrollbar_question = tk.Scrollbar(frame_question_answer,
orient='vertical',
command=text_box_question.yview # первая привязка
)
scrollbar_question.grid(row=0, column=0, sticky='ns')
# вторая привязка
text_box_question.configure(yscrollcommand=scrollbar_question.set)
btn = tk.Button(window, activebackground='red', text="Press me")
btn.pack()
text_box_question.insert(tk.END, "Line1\nLine2\nLine3\nLine4\nLine5\nLine6\nLine7\nLine8\n")
window.mainloop()
Если хотите, чтобы текстовое поля изменялось вместе с окном, то добавьте "веса" той ячейке, что содержит это поле.
frame_question_answer.grid_rowconfigure(0, weight=1)
frame_question_answer.grid_columnconfigure(1, weight=1)
