Python Tkinter-равномерно изменять размер виджетов в окне
У меня есть небольшое тестовое приложение Python, поскольку я изучаю Python и Tkinter, и я пытаюсь выяснить, как равномерно изменить размер сетки меток в окне. Я хотел бы сделать большую сетку из разных цветных квадратов, поэтому я использую метки с набором цветов фона для создания квадратов. Я хотел бы автоматически изменять размер квадратов, когда пользователь расширяет окно, а затем изменять их размер и масштабировать до того же размера, что и окно размер.
что-то вроде этого:
что изменяется и равномерно весы вроде этого:
другими словами: каждая метка должна равномерно масштабироваться по мере масштабирования окна. Я даже не уверен, что использую правильные термины с "окном" и "виджетом". Но я размещаю ярлыки на gui.
тестовый код, который я использую, чтобы попытаться заставить это работать:
import Tkinter
class simpleapp_tk(Tkinter.Tk):
def __init__(self,parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def initialize(self):
self.grid()
label = Tkinter.Label(self,anchor="center",bg="green")
label.grid(column=0,row=0,sticky='EW')
label2 = Tkinter.Label(self,anchor="center",bg="black")
label2.grid(column=1,row=0,sticky='EW')
label3 = Tkinter.Label(self,anchor="center",bg="red")
label3.grid(column=2,row=0,sticky='EW')
label4 = Tkinter.Label(self,anchor="center",bg="purple")
label4.grid(column=0,row=1,sticky='EW')
label5 = Tkinter.Label(self,anchor="center",bg="blue")
label5.grid(column=1,row=1,sticky='EW')
label6 = Tkinter.Label(self,anchor="center",bg="yellow")
label6.grid(column=2,row=1,sticky='EW')
self.grid_columnconfigure(0,weight=0)
if __name__ == "__main__":
app = simpleapp_tk(None)
app.title("Test App")
app.mainloop()
2 ответов
дайте всем строкам и столбцам одинаковый ненулевой вес.
например:
self.grid_columnconfigure(0,weight=1)
self.grid_columnconfigure(1,weight=1)
self.grid_columnconfigure(2,weight=1)
self.grid_rowconfigure(0,weight=1)
self.grid_rowconfigure(1,weight=1)
завершение ответ предоставлен Брайан Окли, код для его решения в python 3 следующий.
обратите внимание, что одним из вариантов управления пропорцией, для которой изменяется размер окна, является установка параметров веса для функций grid_columnconfigure(1,weight=1)
и grid_rowconfigure(1,weight=1)
для различных значений.
import tkinter
class simpleapp_tk(tkinter.Tk):
def __init__(self,parent):
tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def initialize(self):
self.grid()
label = tkinter.Label(self,anchor="center",bg="green")
label.grid(column=0,row=0,sticky='NSEW')
label2 = tkinter.Label(self,anchor="center",bg="black")
label2.grid(column=1,row=0,sticky='NSEW')
label3 = tkinter.Label(self,anchor="center",bg="red")
label3.grid(column=2,row=0,sticky='NSEW')
label4 = tkinter.Label(self,anchor="center",bg="purple")
label4.grid(column=0,row=1,sticky='NSEW')
label5 = tkinter.Label(self,anchor="center",bg="blue")
label5.grid(column=1,row=1,sticky='NSEW')
label6 = tkinter.Label(self,anchor="center",bg="yellow")
label6.grid(column=2,row=1,sticky='NSEW')
self.grid_columnconfigure(0,weight=1)
self.grid_columnconfigure(1,weight=1)
self.grid_columnconfigure(2,weight=1)
self.grid_rowconfigure(0,weight=1)
self.grid_rowconfigure(1,weight=1)
if __name__ == "__main__":
app = simpleapp_tk(None)
app.title("Test App")
app.mainloop()