如何选择tkinter框架的坐标?

问题描述 投票:1回答:1

我正在尝试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渗透不能解决这个问题?

python tkinter position frame pack
1个回答
0
投票

小部件将始终在容器内其分配的空间中居中。

此刻您的代码无法正常工作,因此我将其更改为此代码(我认为它类似于您现在所说的内容:]]

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的左上方,则无法使用pack。您必须改为使用grid

greenFrame = tk.Frame(redFrame, width=100, height=100, bg='green')
greenFrame.grid()

这是因为当您使用包执行side="top"时,将为窗口小部件分配整条水平空间。它在该空间内居中:

Image showing side=top

如果执行side="left",则将为窗口小部件分配一整条垂直空间,并将其居中于该空间。

Image showing side=left

但是,当您使用grid时,您正在将小部件放置在容器内的网格内。在这种情况下,您可以将它们放在row = 0,column = 0上,这会将它们放在容器的左上方。

这是实现您想要的(我认为)的代码:

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.grid()  # optionally pass row=0, column=0 here

root.mainloop()
© www.soinside.com 2019 - 2024. All rights reserved.