Как установить минимальный размер окна в tkinter?
Я понимаю, что после инициализации всех фреймов и виджетов в методе __init__
окно tkinter изменяет размер для всех этих компонентов.
Я хотел бы установить размер инициализированного окна как минимальный. Я хочу, чтобы иметь возможность максимизировать и масштабировать окно больше, но я никогда не хочу, чтобы окно было достаточно маленьким, чтобы начать скрывать виджетов.
Как это сделать?
Ответы
Ответ 1
Вы также можете принудительно обновить обновление без ввода вашего mainloop, используя что-то вроде этого:
root = Tk()
# set up widgets here, do your grid/pack/place
# root.geometry() will return '1x1+0+0' here
root.update()
# now root.geometry() returns valid size/placement
root.minsize(root.winfo_width(), root.winfo_height())
Описание update() в effbot tkinterbook:
обрабатывает все ожидающие события события, вызывает обратные вызовы событий, завершает любые в ожидании управления геометрией, при необходимости перерисовывает виджеты и вызывает все незавершенные задачи бездействия. Этот метод следует использовать с осторожностью, поскольку он может привести к действительно неприятным условиям гонки, если они вызваны из неправильного место (например, из обратного вызова события или из функции который можно каким-либо образом вызывать из обратного вызова события и т.д.). Когда в сомните, вместо этого используйте update_idletasks.
Я очень хорошо это использовал, в то время как возился с попыткой выяснить, как делать такие вещи, как получить размер/положение виджетов перед тем, как перейти в основной цикл.
Ответ 2
Я знаю, что этот вопрос старый, но здесь другой способ:
root = Tk()
root.minsize(foo, bar)
root.minsize() устанавливает минимальный размер окна в foo и bar, где foo и bar - это ширина и высота окна соответственно.
Ваш должен, однако, поместить этот код перед вашим mainloop.
Ответ 3
Я понял:
def __init__(self, master):
...
self.master.update_idletasks()
self.master.after_idle(lambda: self.master.minsize(self.master.winfo_width(), self.master.winfo_height()))
Ответ 4
root = Tk()
Так как создается корневое окно. Корневое окно является основным окном приложения в наших программах. Он имеет заголовок и границы. Они предоставляются диспетчером окон. Он должен быть создан перед любыми другими виджетами.
root.geometry("250x150+300+300")
Метод geometry() устанавливает размер для окна и позиционирует его на экране. Первые два параметра - ширина и высота окна. Последние два параметра - координаты экрана x, y.
app = Example(root)
Здесь мы создаем экземпляр класса приложения.
root.mainloop()
Наконец, мы входим в mainloop. Обработка событий начинается с этого момента. Mainloop принимает события из оконной системы и отправляет их в виджеты приложения. Он заканчивается, когда мы нажимаем кнопку закрытия панели заголовка или вызываем метод quit().
![enter image description here]()
Надеюсь, вы нашли это полезным.