Python Tkinter - 在窗口中均匀缩放控件
我有一个小的Python测试应用,因为我正在学习Python和Tkinter。我想弄明白如何在窗口中均匀地调整标签的大小。我想做一个大网格,里面有不同颜色的方块,所以我使用了设置了背景颜色的标签来制作这些方块。我希望当用户扩大窗口时,这些方块能够自动调整大小,然后当窗口变小时,它们也能缩小到相同的大小。
就像这样:
然后像这样均匀地调整大小:
换句话说:每个标签在窗口缩放时都应该均匀地缩放。我甚至不确定“窗口”和“控件”这些词用得对不对。但我是在一个图形界面上放置标签。
我正在使用的测试代码,试图让这个功能正常工作:
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 个回答
12
这是对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()
21
给所有的行和列设置相同的非零权重。
举个例子:
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)