首页 文章

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

提问于
浏览
9

我有一个小测试Python应用程序,因为我正在学习Python和Tkinter,我试图弄清楚如何在窗口中均匀调整标签网格 . 我想制作一个不同颜色方块的大网格,所以我使用背景颜色设置的标签来制作正方形 . 我想在用户展开窗口时自动调整方块的大小,然后让它们调整大小并缩小到与窗口大小减小相同的大小 .

像这样的东西:

Default "square" size. Opens up at this size by default.

这样调整大小和均匀缩放:

Size when the window is expanded in size.

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

  • 3

    为所有行和列提供相同的非零权重 .

    例如:

    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)
    
  • 10

    完成Bryan Oakley提供的answer,在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()
    

相关问题