Как установить мин и максимальную высоту или ширину рамы?
-
10-10-2019 - |
Вопрос
Размер окон Tkinter можно управлять следующими методами:
.minsize()
.maxsize()
.resizable()
Существуют ли эквивалентные способы контроля размера рамков TKINTER или TTK?
@Bryan: я изменил ваш код Frame1.pack на следующее:
frame1.pack(fill='both', expand=True)
frame1.bind( '<Configure>', maxsize )
И я добавил этот обработчик событий:
# attempt to prevent frame from growing past a certain size
def maxsize( event=None ):
print frame1.winfo_width()
if frame1.winfo_width() > 200:
print 'frame1 wider than 200 pixels'
frame1.pack_propagate(0)
frame1.config( width=200 )
return 'break'
Приведенный выше обработчик событий обнаруживает, что ширина рамы слишком велика, но не может предотвратить увеличение размера. Это ограничение Тинтера или я неправильно понял ваше объяснение?
Решение
Нет единой волшебной функции, чтобы привести кадр к минимальному или фиксированному размеру. Тем не менее, вы, безусловно, можете заставить размер рамы, давая раме ширину и высоту. Затем вам нужно сделать потенциально еще две вещи: когда вы помещаете это окно в контейнер, вам нужно убедиться, что менеджер геометрии не сокращается и не расширяет окно. Во -вторых, если рама представляет собой контейнер для другого виджета, выключите сетку или распространение упаковки, чтобы рама не сокращалась и не расширилась, чтобы соответствовать своему собственному содержимому.
Обратите внимание, однако, что это не помешает вам изменить размер окна, чтобы быть меньше, чем внутренняя рама. В этом случае рама будет просто обрезана.
import Tkinter as tk
root = tk.Tk()
frame1 = tk.Frame(root, width=100, height=100, background="bisque")
frame2 = tk.Frame(root, width=50, height = 50, background="#b22222")
frame1.pack(fill=None, expand=False)
frame2.place(relx=.5, rely=.5, anchor="c")
root.mainloop()