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

8 投票
1 回答
4452 浏览
提问于 2025-04-17 11:02

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

每次我按下按钮,窗口的大小就会自动调整,以适应新增的标签。但是,如果我用鼠标手动调整窗口的大小,那么这个自动调整的功能就会停止,从那以后,我必须手动改变窗口的大小,才能看到新添加的按钮。

那么,是什么决定了顶层窗口的大小是由程序控制还是由用户控制呢?

在用户手动调整过窗口大小后,程序如何才能重新获得自动调整的功能呢?

1 个回答

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

撰写回答