如何选择 tkinter 框架的坐标?
How can I choose coordinate of tkinter frame?
我正在尝试使用 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)
问题是我不能选择它的位置。它仍然位于 window 的顶部并居中。
如果我更改 padx
参数,则不会有任何变化。
如果我更改 pady
参数,框架会更改其 Y 位置。为什么这没有附加 X 位置?
默认情况下,小部件将在其分配的 space 容器中居中。
你的代码目前不起作用,所以我把它改成了这个(我认为它模仿了你所说的你目前拥有的):
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"
使用 pack 时,小部件会分配一整条水平 space。它在 space 默认情况下居中:
如果您这样做 side="left"
,那么小部件将被分配一整条垂直 space,并且默认情况下它会在 space 中居中。
然而,在这两种情况下,您都可以更改锚点,以便您的组件在分配的 spaces 中以不同的方式放置。
这是实现(我认为)您想要的代码:
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()
我正在尝试使用 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)
问题是我不能选择它的位置。它仍然位于 window 的顶部并居中。
如果我更改 padx
参数,则不会有任何变化。
如果我更改 pady
参数,框架会更改其 Y 位置。为什么这没有附加 X 位置?
默认情况下,小部件将在其分配的 space 容器中居中。
你的代码目前不起作用,所以我把它改成了这个(我认为它模仿了你所说的你目前拥有的):
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"
使用 pack 时,小部件会分配一整条水平 space。它在 space 默认情况下居中:
如果您这样做 side="left"
,那么小部件将被分配一整条垂直 space,并且默认情况下它会在 space 中居中。
然而,在这两种情况下,您都可以更改锚点,以便您的组件在分配的 spaces 中以不同的方式放置。
这是实现(我认为)您想要的代码:
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()