如何选择tkinter框架的坐标?

2024-06-08 23:14:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在试验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位置上?你知道吗


Tags: master框架fillframesidepacktkbg
1条回答
网友
1楼 · 发布于 2024-06-08 23:14:54

默认情况下,小部件将集中在容器中分配的空间中。你知道吗

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

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

相关问题 更多 >