Проблема изменения размера кадра в Tk / ttk python - PullRequest
2 голосов
/ 20 октября 2010

Я создаю графический интерфейс с использованием Tkinter / ttk в Python 2.7, и у меня возникла проблема, когда Frame изменяет свой размер после размещения виджета внутри него.Я новичок в Python и раньше не пользовался Tkinter.

пример:

ROOT = Tk()
FRAME = ttk.Frame(ROOT, width=300, height=300, relief='groove')
FRAME.grid()
ROOT.mainloop()

создаст рифленую рамку 300x300, если я помещу в нее виджет примерно так:

ROOT = Tk()
FRAME = ttk.Frame(ROOT, width=300, height=300, relief='groove')
BUTTON = ttk.Button(FRAME, text="DON'T READ THIS TEXT")
FRAME.grid()
BUTTON.grid()
ROOT.mainloop()  

рамка будет уменьшена, чтобы соответствоватькнопка.Есть ли способ заставить рамку не изменить размер?

Ответы [ 4 ]

6 голосов
/ 20 октября 2010

Чтобы заставить рамку сохранять исходные размеры, отключите «распространение геометрии».В вашем случае вы бы позвонили FRAME.grid_propagate(False).

Говоря как человек с более чем 15-летним опытом работы с Tk, могу я предположить, что вам почти наверняка не нужна эта функция.Способность Tk «сжать, чтобы соответствовать» действительно велика, и позволяет действительно легко создавать GUI с правильным поведением изменения размера.Как только вы начнете отключать распространение геометрии, вы обнаружите, что у вас либо есть графический интерфейс с плохим поведением при изменении размера, либо вы потратите много времени на настройку размеров и размещение виджетов.

1 голос
/ 20 октября 2010

, если вы хотите добавить отступы, используйте widg.grid(ipadx=..., ipady=..., padx=..., pady=...)

в противном случае вам нужно будет добавить больше контекста к тому, какой макет вы пытаетесь достичь

0 голосов
/ 20 октября 2017

Это работает для меня:

app = Application()
app.master.title('Example')
app.master.geometry('640x480')
app.mainloop()

Аппликация - это Frame в моем случае с разметкой сетки. Размер изменяется до размера главного окна, поэтому нам нужно изменить размер главного окна.

0 голосов
/ 08 декабря 2010

Это должно сделать работу: ROOT.geometry("640x480")

...