如何选择 tkinter 框架的坐标?

nn6*_*n65 2 python position tkinter frame pack

我正在尝试使用 Tkinter,因为我正在尝试放置树框架。两个框架必须并排放置:红色框架和蓝色框架。(参见框架图)。我用以下说明放置这两个框架:

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')
Run Code Online (Sandbox Code Playgroud)

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

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

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

如果我更改padx参数,则不会发生任何变化。

如果我更改pady参数,框架会更改其 Y 位置。为什么这不附加在 X 位置上?

Jos*_*rra 6

默认情况下,小部件将位于容器内为其分配的空间的中心。

您的代码目前不起作用,因此我将其更改为以下内容(我认为它模仿了您目前所说的内容):

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()
Run Code Online (Sandbox Code Playgroud)

如果您运行此代码,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')
Run Code Online (Sandbox Code Playgroud)

这是因为当您side="top"使用 pack 时,小部件会被分配一整条水平空间。默认情况下它会在该空间内居中:

图像显示侧面=顶部

如果这样做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()
Run Code Online (Sandbox Code Playgroud)