Tkinter изменить размер кадра и содержимого с главным окном - PullRequest
0 голосов
/ 19 мая 2018

Я пытаюсь понять, как контролировать изменение размера окна, содержащего фрейм.В коде у меня есть три кнопки сверху, которые должны оставаться именно там, где они есть.

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

from tkinter import *
from tkinter import scrolledtext

master_window = Tk()

# Create the buttons
btn_Image = Button(master_window, text='Image')
btn_Image.grid(row=1, column=1, padx=(10), pady=10, sticky=E + W)

btn_File = Button(master_window, text='File')
btn_File.grid(row=1, column=2, padx=(10), pady=10, sticky=E + W)

btn_Folder = Button(master_window, text='Folder')
btn_Folder.grid(row=1, column=3, padx=(10), pady=10, sticky=E + W)

# Group1 Frame ----------------------------------------------------
group1 = LabelFrame(master_window, text="Text Box", padx=5, pady=5)
group1.grid(row=2, column=1, columnspan=3, padx=10, pady=10, sticky=E+W+N+S)

# Create the textbox
txtbox = scrolledtext.ScrolledText(group1, width=40, height=10)
txtbox.grid(row=1, column=1,  columnspan=3, sticky=E+W+N+S)

mainloop()

1 Ответ

0 голосов
/ 19 мая 2018

Номера строк и столбцов диспетчера grid() начинаются с 0, а не с 1 (хотя нет ничего плохого в том, чтобы начинать размещать элементы там, где вы хотите, я просто упоминаю об этом, потому что ваш код создает у меня впечатление, что вы думаетеячейки начинаются с 1, а не с 0).Поскольку я не вижу причины, по которой нужно начинать размещать виджеты с row=1 и column=1, в моем решении ниже я начинаю размещать с индексом 0.

Я предлагаю вам создать другой контейнер - родительский виджет - для 3 кнопок в вопросах (скажем, tkinter.Frame()).

Вот код:

from tkinter import *
from tkinter import scrolledtext

master_window = Tk()

# Parent widget for the buttons
buttons_frame = Frame(master_window)
buttons_frame.grid(row=0, column=0, sticky=W+E)    

btn_Image = Button(buttons_frame, text='Image')
btn_Image.grid(row=0, column=0, padx=(10), pady=10)

btn_File = Button(buttons_frame, text='File')
btn_File.grid(row=0, column=1, padx=(10), pady=10)

btn_Folder = Button(buttons_frame, text='Folder')
btn_Folder.grid(row=0, column=2, padx=(10), pady=10)

# Group1 Frame ----------------------------------------------------
group1 = LabelFrame(master_window, text="Text Box", padx=5, pady=5)
group1.grid(row=1, column=0, columnspan=3, padx=10, pady=10, sticky=E+W+N+S)

master_window.columnconfigure(0, weight=1)
master_window.rowconfigure(1, weight=1)

group1.rowconfigure(0, weight=1)
group1.columnconfigure(0, weight=1)

# Create the textbox
txtbox = scrolledtext.ScrolledText(group1, width=40, height=10)
txtbox.grid(row=0, column=0,   sticky=E+W+N+S)

mainloop()

Демонстрация:

При не растянутом:

enter image description here

Среднее растяжение:

enter image description here

После максимального растяжения:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...