Как установить мин и максимальную высоту или ширину рамы?

StackOverflow https://stackoverflow.com/questions/4399180

Вопрос

Размер окон 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()
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top