Python Tkinter - 在窗口中均匀调整小部件的大小

21

我正在学习Python和Tkinter,编写了一个小的测试Python应用程序,并尝试找出如何均匀地调整窗口中标签网格的大小。我想制作一个不同颜色的大网格,所以我使用设置了背景颜色的标签来制作正方形。我想在用户扩展窗口时自动调整正方形的大小,然后在减小窗口大小时将它们调整为相同的大小。

像这样:

默认的"正方形"大小。默认情况下以此大小打开。

它可以均匀地调整大小和缩放,就像这样:

窗口扩展大小时的大小。

换句话说:当窗口缩放时,每个标签都应该均匀缩放。我甚至不确定是否使用正确的术语,比如“窗口”和“部件”。但是我正在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个回答

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)

太棒了!谢谢!我查找了一下,但没有找到适用于所有行和列的“默认”设置。您知道这是否存在,还是我需要为每个列和行单独添加“self.grid_columnconfigure(0,weight = 1)”和“self.grid_columnconfigure(1,weight = 1)”? - user1340081
1
你需要为每一行和每一列单独进行操作。 - Bryan Oakley
太棒了。再次感谢! - user1340081

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()

一种管理窗口调整比例的选项是将权重参数设置为不同的值。 - aturegano
你的解决方案很有帮助。还有一个后续问题:如果小部件被组织成包,那怎么办呢?似乎 widget.pack() 没有 sticky 作为一个选项。 - Anas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接