#python #python-3.x #tkinter
Вопрос:
В коде, который я пишу, я создаю несколько фреймов и размещаю их на месте, как в примере. Рамка иерархии имеет заданную ширину 260. Когда я помещаю этикетку шириной меньше ширины рамки, ширина рамки уменьшается до ширины этикетки.
Код приведен ниже:
from tkinter import *
from tkinter import ttk
root = Tk()
root.title("Application")
root.geometry("1200x1000")
s=ttk.Style()
s.configure('TFrame', background='gray')
s.configure('windowframes.TFrame', background='darkgray')
mainframe = ttk.Frame(root, padding="2 2 2 2",height=300)
mainframe.grid(column=0, row=0, sticky=(N,E,S,W))
toolframe = ttk.Frame(mainframe,height=60,style='windowframes.TFrame')
toolframe.grid(column=0, row=0, columnspan=2,sticky=(N,S,E,W), padx=2, pady=2)
hierarchyframe = ttk.Frame(mainframe,width=260,style='windowframes.TFrame')
hierarchyframe.grid(column=0, row=1, rowspan=2, sticky=(N,S,E,W), padx=2, pady=2)
label = Label(hierarchyframe,text="sample")
label.grid(column=0, row=0)
graphicframe = ttk.Frame(mainframe,style='windowframes.TFrame')
graphicframe.grid(column=1, row=1, sticky=(N,S,E,W), padx=2, pady=2)
fileframe = ttk.Frame(mainframe,height=360,style='windowframes.TFrame')
fileframe.grid(column=1, row=2, sticky=(N,S,E,W), padx=2, pady=2)
mainframe.columnconfigure(1,weight=1)
mainframe.rowconfigure(1,weight=1)
root.columnconfigure(0,weight=1)
root.rowconfigure(0,weight=1)
root.mainloop()
Стили есть, поэтому вы можете видеть контуры рамок.
Ответ №1:
Вы можете исправить то, что вам нужно сказать Frame
, чтобы он не распространял свои размеры, то есть не подстраивался под свое содержимое. Вы можете предотвратить это, используя grid_propagate()
метод, показанный ниже:
...
toolframe = ttk.Frame(mainframe,height=60,style='windowframes.TFrame')
toolframe.grid(column=0, row=0, columnspan=2,sticky=(N,S,E,W), padx=2, pady=2)
hierarchyframe = ttk.Frame(mainframe,width=260,style='windowframes.TFrame')
hierarchyframe.grid(column=0, row=1, rowspan=2, sticky=(N,S,E,W), padx=2, pady=2)
hierarchyframe.grid_propagate(False) # <=== ADDED ====
label = Label(hierarchyframe,text="sample")
...
Вот скриншот, показывающий результат:
Другой альтернативой было бы использовать установку минимального размера столбца в пикселях, как показано ниже, что не помешало бы ему расширяться:
hierarchyframe.columnconfigure(0, minsize=260)