Как я могу центрировать средний столбец в tkinter

#python #tkinter

#python #tkinter

Вопрос:

Моя проблема в том: На выходе должны отображаться 2 боковые панели (столбцы 0 и 2) с метками содержимого и записями, а одно центральное окно (столбец 1) намного больше, чем другие боковые панели в середине. Но средний столбец всегда отображается с правой стороны и в виде очень маленькой рамки. Пожалуйста, помогите.

Мой код и картинка:Как это выглядит

 import tkinter as tk, tkinter.ttk as ttk

root = tk.Tk()
root.title("THE FRIDGER")


root.grid_columnconfigure(0, weight=1)
root.grid_rowconfigure(2, weight=1)

#prepared data
dflt = dict(fg="white", bg="black")
pads = dict(pady=4, padx=4)

#header frame
header = tk.Frame(root, bg="black")
header.grid(row=0, column=0, columnspan=3, sticky="nsew")

for i in range(2):
    header.grid_columnconfigure(i, weight=1)

#header labels
tk.Label(header, text="Fridge", **dflt).grid(column=0, row=0, **pads)
tk.Label(header, text="Recipes", **dflt).grid(column=1, row=0, **pads)


#separator
s = ttk.Style()
s.configure('custom.TSeparator', background='blue')
ttk.Separator(root, style='custom.TSeparator').grid(row=1, column=0, columnspan=3, sticky="ew")


#left side content
l_content = tk.Frame(root, bg="black")
l_content.grid(row=2, column=0, sticky="nsew")

tk.Label(l_content, text="Content:", **dflt).grid(column=0, row=0, sticky=tk.W)

l_query = tk.Entry(l_content, width=36, relief=tk.FLAT, bg = "white", fg = "black")
l_query.grid(column=0, row=1, sticky=tk.W)


#right side content
r_content = tk.Frame(root, bg="black")
r_content.grid(row=2, column=2, sticky="nsew")

tk.Label(r_content, text="Content:", **dflt).grid(column=0, row=2, sticky=tk.W)

r_query = tk.Entry(r_content, width=36, relief=tk.FLAT, bg = "white", fg = "black")
r_query.grid(column=0, row=3, sticky=tk.W)


#middle content

m_content = tk.Frame(root, bg="white")
m_content.grid(row=2, column=1, sticky="nsew")

tk.Label(m_content, text="This should appear in the middle", **dflt).grid(column=0, row=2,       sticky=tk.W)

m_content.grid_columnconfigure(1, weight = 1)





root.mainloop()
  

Ответ №1:

Причина, по которой левый столбец такой большой, заключается в том, что вы присваиваете ему вес 1. Если вы хотите, чтобы центральный столбец занимал все дополнительное пространство, вам нужно присвоить ему положительный вес вместо присвоения веса столбцу 0.

 root.grid_columnconfigure(1, weight=1)
  

Ответ №2:

Вы установили weight=1 неправильный столбец:

  • root.grid_columnconfigure(0, weight=1) должно быть root.grid_columnconfigure(1, weight=1)

  • m_content.grid_columnconfigure(1, weight=1) должно быть m_content.grid_columnconfigure(0, weight=1)

И удалить sticky опцию из:

 tk.Label(m_content, text="This should appear in the middle", **dflt).grid(column=0, row=2, sticky=tk.W)