Это относительно простая проблема для решения.
Если вы хотите продолжить создание программы с помощью менеджера геометрии Grid
, вам необходимо ознакомиться с функциями Grid.rowconfigure()
и Grid.columnconfigure()
.
Они позволяют вам установить параметры конфигурации для Grid
менеджера геометрии в пределах виджета-контейнера. В частности, нас интересует атрибут weight
. Как описано здесь:
С каждым столбцом и строкой связан параметр сетки "вес", который указывает, насколько он должен увеличиться, если в мастере есть дополнительное место для заполнения. По умолчанию вес каждого столбца или строки равен 0, что означает, что они не расширяются, чтобы заполнить пространство.
Чтобы размер пользовательского интерфейса изменился, нам нужно придать положительный вес столбцам, которые мы хотим расширить. Это делается с помощью методов сетки «columnconfigure» и «rowconfigure». Если два столбца имеют одинаковый вес, они будут расширяться с одинаковой скоростью; если один имеет вес 1, другой - 3, последний будет расширяться на три пикселя за каждый пиксель, добавленный к первому.
(выделено мной)
Итак, в этом случае нам нужно внести несколько изменений. Во-первых, нам нужно добавить sticky = "NESW"
к вызовам frame.grid()
и text_widget.grid()
, иначе виджет Text
не будет расширяться с помощью полос прокрутки. Во-вторых, нам нужно добавить в программу приведенный ниже фрагмент:
Grid.columnconfigure(root, 0, weight=1)
Grid.rowconfigure(root, 0, weight=1)
Grid.columnconfigure(frame, 0, weight=1)
Grid.rowconfigure(frame, 0, weight=1)
Это заканчивается приведенной ниже программой (после внесения некоторых изменений, чтобы я мог фактически запустить предоставленный пример):
from tkinter import *
from tkinter import ttk
root = Tk()
frame = ttk.Frame(master=root)
frame.grid(sticky="NSEW")
vbar = ttk.Scrollbar(root, orient=VERTICAL)
hbar = ttk.Scrollbar(root, orient=HORIZONTAL)
vbar.grid(row=0, column=1, sticky="NS")
hbar.grid(row=1, column=0, sticky="EW")
text_widget = Text(frame, wrap=NONE, undo=True, yscrollcommand=vbar.set, xscrollcommand=hbar.set)
text_widget.grid(sticky="NSEW")
vbar.config(command=text_widget.yview)
hbar.config(command=text_widget.xview)
Grid.columnconfigure(root, 0, weight=1)
Grid.rowconfigure(root, 0, weight=1)
Grid.columnconfigure(frame, 0, weight=1)
Grid.rowconfigure(frame, 0, weight=1)
В качестве примечания: было бы очень просто перестроить эту программу с помощью менеджера геометрии Pack
, который является (субъективно) более разумным, когда дело доходит до изменения размеров виджетов:
from tkinter import *
from tkinter import ttk
root = Tk()
frame = ttk.Frame(master=root)
frame.pack(expand=True, fill="both")
vbar = ttk.Scrollbar(frame, orient=VERTICAL)
hbar = ttk.Scrollbar(root, orient=HORIZONTAL)
vbar.pack(side="right", fill="y")
root.update()
hbar.pack(side="bottom", fill="x", padx=vbar.winfo_width())
text_widget = Text(frame, wrap=NONE, undo=True, yscrollcommand=vbar.set, xscrollcommand=hbar.set)
text_widget.pack(expand=True, fill="both")
vbar.config(command=text_widget.yview)
hbar.config(command=text_widget.xview)
person
Ethan Field
schedule
16.11.2018