什么控制Tkinter中的自动窗口大小调整?

tim*_*bod 8 python tkinter

Tkinter顶级窗口似乎有两种"模式":大小由应用程序决定,用户控制大小.考虑以下代码:

from tkinter import *

class Test(Frame):
    def __init__(self,parent):
        Frame.__init__(self,parent)
        self.b1 = Button(self, text="Button 1",command=self.b1Press)
        self.b1.pack()

    def b1Press(self):
        print("b1Press")
        label = Label(self, text="Label")
        label.pack()

root = Tk()
ui = Test(root)
ui.pack(fill='both', expand=1)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

每次按下按钮,可见窗口都会改变大小以适应其他标签.但是,如果我手动调整窗口大小(使用鼠标),则会停止此自动调整大小的行为,从那时起,我必须手动更改窗口的大小以查看添加时的新按钮.

是什么决定了顶层窗口的大小是否受应用程序或用户的控制?

用户手动调整大小后,应用程序如何重新获得自动调整大小?

Bry*_*ley 12

规则非常简单 - 顶级窗口在给定固定大小时具有固定大小,否则"收缩到适合".

有两种方法可以为顶级窗口提供固定大小:用户可以手动调整大小,或者应用程序代码可以调用wm_geometry以在启动时为其提供大小.

要重置原始行为,请为窗口指定一个空几何.例如:

def __init__(self,parent):
    ...
    self.b2 = Button(self, text="Reset", command=self.b2Press)
    self.b2.pack()

def b2Press(self):
    self.winfo_toplevel().wm_geometry("")
Run Code Online (Sandbox Code Playgroud)