我有一个小的测试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()
答案 0 :(得分:11)
为所有行和列提供相同的非零权重。
例如:
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)
答案 1 :(得分:3)
完成answer提供的Bryan Oakley,在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()