Вопрос по – Как установить минимальный размер окна в tkinter?

18

Насколько я понимаю, после инициализации всех кадров и виджетов в__init__ метод, окно tkinter изменяет размеры, чтобы соответствовать всем этим компонентам.

Я хотел бы установить инициализированный размер окна равным его минимальному размеру. Я хочу иметь возможность максимизировать и масштабировать окно больше, но я никогда не хочу, чтобы окно было достаточно маленьким, чтобы начать скрывать виджеты.

Как мне это сделать?

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

Ваш Ответ

4   ответа
2

Я понял:

def __init__(self, master):
    ...
    self.master.update_idletasks()
    self.master.after_idle(lambda: self.master.minsize(self.master.winfo_width(), self.master.winfo_height()))
9

root = Tk()
root.minsize(foo, bar)

root.minsize() устанавливает минимальный размер окна равнымfoo а такжеbar, гдеfoo а такжеbar ширина и высота окна соответственно.

Однако вы должны запустить этот код до того, как ваш основной цикл завершится. Он вступит в силу только после вызова команды.

Это неправда, что вы ДОЛЖНЫ поместить этот код перед своей основной последовательностью.
36

не вводя основной цикл, используя что-то вроде этого:

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

ОписаниеОбновить() в Ebbot Tkinterbook:

Processes all pending events, calls event callbacks, completes any pending geometry management, redraws widgets as necessary, and calls all pending idle tasks. This method should be used with care, since it may lead to really nasty race conditions if called from the wrong place (from within an event callback, for example, or from a function that can in any way be called from an event callback, etc.). When in doubt, use update_idletasks instead.

Я использовал это много, пытаясь понять, как сделать такие вещи, как получить размер / положение виджетов, прежде чем переходить в основной цикл.

Привет, эксперт по Python! Пожалуйста, посмотрите наstackoverflow.com/questions/23022005/…
Это намного чище, чем мой ответ. Спасибо! Jace Browning
-4
root = Tk()

риложения в наших программах. Он имеет строку заголовка и границы. Они предоставляются оконным менеджером. Он должен быть создан перед любыми другими виджетами.

root.geometry("250x150+300+300")

geometry() Метод устанавливает размер окна и размещает его на экране. Первые два параметра - ширина и высота окна. Последние два параметра - x, y экранные координаты.

app = Example(root)

Здесь мы создаем экземпляр класса приложения.

root.mainloop()  

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

enter image description here

Я надеюсь, что вы нашли это полезным.

@miksiii Это «Волшебство» Функция - это то, что дают другие ответы. Это даже не мешает пользователю каким-либо образом изменять его размер и не предотвращает скрытие виджетов, как просил OP.
Это, похоже, не отвечает на вопрос вообще. Как ваш ответ связан с установкой минимального размера окна?
Не существует единой магической функции для принудительного задания минимального или фиксированного размера кадра. Тем не менее, вы, безусловно, можете изменить размер кадра, задав его ширину и высоту.

Похожие вопросы