Что контролирует автоматическое изменение размера окна в 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()

каждый раз, когда я нажимаю кнопку, видимое окно меняет размер, чтобы соответствовать дополнительной метке. Однако, если я изменяю размер окна вручную (с помощью мыши), то он останавливает это автоматическое изменение размера, и с тех пор я должен вручную изменить размер окна, чтобы просмотреть новые кнопки, как они есть добавлен.

что определяет, находится ли размер окна верхнего уровня под контролем приложения или пользователя?

как приложение может восстановить автоматический размер после того, как пользователь вручную изменил размер?

1 ответов


правило довольно простое-окно верхнего уровня имеет фиксированный размер, когда ему задан фиксированный размер, иначе оно "сжимается, чтобы соответствовать".

есть два способа дать окну верхнего уровня фиксированный размер: пользователь может изменить его размер вручную, или ваш код приложения может вызвать 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("")