如何选择tkinter框架的坐标?

时间:2019-10-30 10:30:49

标签: python tkinter position frame pack

在尝试放置树框时,我正在尝试Tkinter。必须并排放置两个框架:红色框架和蓝色框架。 (请参见frame image)。我将这两个框架放置在以下说明中:

redFrame = tk.Frame(master=masterFrame, bg='red')
redFrame.pack_propagate(0)
redFrame.pack(fill='both', side='left', expand='True')

blueFrame = tk.Frame(master=masterFrame, bg='blue')
destFrame.pack_propagate(0)
destFrame.pack(fill='both', side='right', expand='True')

现在,我想在红色框架内放置另一个框架(绿色),该框架位于主界面的左侧:

greenFrame = tk.Frame(master=masterFrame, width=100, height=100, bg='green')
greenFrame.pack_propagate(0)
greenFrame.pack(side='bottom', padx=0, pady=0)

问题是我无法选择其位置。它仍然保留在窗口的顶部并居中。

如果我更改padx参数,则没有任何改变。

如果我更改了pady参数,则框架会更改其Y位置。为什么X渗透不能解决这个问题?

1 个答案:

答案 0 :(得分:1)

默认情况下,小部件将在容器内分配的空间中居中。

您的代码目前无法正常工作,因此我将其更改为此代码(我认为它模仿了您现在说的内容):

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')

这是因为当您使用pack进行side="top"时,将为窗口小部件分配整个水平空间。默认情况下,它位于该空间的中心位置

Image showing side=top

如果您执行side="left",则将为窗口小部件分配一整条垂直空间,并且默认情况下它会在该空间居中。

Image showing 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()