Что контролирует автоматическое изменение размеров окон в Tkinter? - PullRequest
8 голосов
/ 25 января 2012

Окна верхнего уровня 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 голосов
/ 25 января 2012

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

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