Виджеты будут по умолчанию центрированы в выделенном им пространстве внутри контейнера.
Ваш код на данный момент не работает, поэтому я изменил его на это (я думаю, что он имитирует то, что выговоря, что у вас в данный момент есть):
import tkinter as tk
root = tk.Tk()
root.geometry("600x400")
redFrame = tk.Frame(root, bg='red')
redFrame.pack_propagate(0)
redFrame.pack(fill='both', side='left', expand='True')
blueFrame = tk.Frame(root, bg='blue')
blueFrame.pack_propagate(0)
blueFrame.pack(fill='both', side='right', expand='True')
greenFrame = tk.Frame(redFrame, width=100, height=100, bg='green')
greenFrame.pack_propagate(0)
greenFrame.pack(side='top', padx=0, pady=0)
root.mainloop()
Если вы запустите этот код, greenFrame
появится, как показано на вашем изображении, вверху и по центру внутри redFrame
.
Если выЕсли greenFrame
появится в верхнем левом углу redFrame
, вы можете изменить опорную точку кадра:
greenFrame = tk.Frame(redFrame, width=100, height=100, bg='green')
greenFrame.pack_propagate(0)
greenFrame.pack(side='top', padx=0, pady=0, anchor='w')
Это потому, что когда вы делаете side="top"
, используя пакет, виджет выделяетсяцелая полоса горизонтального пространства. По умолчанию он центрируется в этом пространстве:
Если вы сделаете side="left"
, тогда виджет будет выделен целой полосой вертикального пространства, ипо умолчанию он центрируется в этом пространстве.
Однако в обоих случаях вы можете изменить опорную точку, чтобы ваш компонент по-разному размещался в этой области. выделенные пробелы.
Это код, который достигает того, что (я думаю) вы хотите:
import tkinter as tk
root = tk.Tk()
root.geometry("600x400")
redFrame = tk.Frame(root, bg='red')
redFrame.pack_propagate(0)
redFrame.pack(fill='both', side='left', expand='True')
blueFrame = tk.Frame(root, bg='blue')
blueFrame.pack_propagate(0)
blueFrame.pack(fill='both', side='right', expand='True')
greenFrame = tk.Frame(redFrame, width=100, height=100, bg='green')
greenFrame.pack_propagate(0)
greenFrame.pack(side='top', padx=0, pady=0, anchor='w')
root.mainloop()