2012-01-25 2 views
8

Окна верхнего уровня 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() 

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

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

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

ответ

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

Отлично - действительно достаточно простой ответ, но один из них я пытался найти. – timbod

Смежные вопросы