Python 是否有一种方法可以使一个位置小部件始终相对于另一个小部件(如Pack)放置
因此,我使用place方法使一个小部件与其他小部件重叠,但它的位置相对于使用pack的小部件(使用Python 是否有一种方法可以使一个位置小部件始终相对于另一个小部件(如Pack)放置,python,tkinter,widget,resize,frame,Python,Tkinter,Widget,Resize,Frame,因此,我使用place方法使一个小部件与其他小部件重叠,但它的位置相对于使用pack的小部件(使用winfo)。调整父帧大小时,包位置将更改,但放置位置不会更改。 这是我的代码: from tkinter import * root = Tk() root.geometry("200x300") search = Entry(root) search.pack() search.update() x = search.winfo_x() y = search.winfo_
winfo
)。调整父帧大小时,包位置将更改,但放置位置不会更改。
这是我的代码:
from tkinter import *
root = Tk()
root.geometry("200x300")
search = Entry(root)
search.pack()
search.update()
x = search.winfo_x()
y = search.winfo_y()
width = search.winfo_width()
height = search.winfo_height()
frame = LabelFrame(root, width=width, height=200)
frame.place(x=x, y=y+height)
root.mainloop()
调整窗口大小时,LabelFrame保持在其x和y位置。条目小部件将被用作搜索栏,我想在它下面自动完成。条目小部件下会有小部件,自动完成功能只会在您键入时出现(但这不是我想要的。如果您需要的话,它会更详细)。那么,有没有一种方法可以让place小部件始终相对于pack小部件。如果您有任何答案,谢谢:)如果您的目标是将一个小部件相对于另一个小部件放置,那么,
place
允许您这样做。对于工具提示或其他暂时性的小部件等不适合正常布局的东西来说,它非常有用
最简单的方法是使小部件成为控制小部件的子部件。例如,对于要相对于搜索框放置的框架,可以将其设置为搜索框的子项。如果这样做不方便,您可以使用in_u
参数告诉place
哪个小部件是另一个小部件
例如,要将labelframe放置在搜索框的正下方,并与搜索框的宽度相同,可以执行以下操作:
frame.place(
in_=search,
bordermode="outside",
anchor="nw",
relx=0,
rely=1.0,
y=5,
relwidth=1.0
)
这就是选项的含义:
:相对于搜索框放置框架在搜索中
:相对测量值来自边界外部(默认值为“内部”)bordermode=“outside”
:放置小部件,使框架的西北角位于计算坐标处anchor=“nw”
:将定位点放置在距离搜索框左边缘0%的位置relx=0
:将框架放置在搜索框高度的100%rely=1.0
:将5个像素添加到计算位置,使其仅浮动在窗口下方一点y=5
:将框架宽度设置为搜索框宽度的100%relwidth=1.0
显然,您不必使用
y=5
,我只是添加了它来说明使用rely
和y
的加法行为,不清楚您在问什么;标题和最后一句问了两个完全不同的问题。另外,你知道place
支持相对位置吗?@BryanOakley标题和最后一句是不同的问题,因为我认为两者都有可行的答案(因此我写了“我的问题可能不是最好的答案”)。如果不清楚,我很抱歉。另外,我不知道背包的相对位置,但你会怎么做呢?我使用winfo进行相对放置。不,pack
没有相对放置,但是place
有相对放置。如果你能在你的问题中加入一个。仅仅说你想让一个小部件和另一个小部件相对,就可以用许多不同的方式来回答。我知道包不是你的问题。你之前的评论说“我不知道背包的相对位置”。我纠正你们的错误是因为背包并没有相对的位置。你们想要什么还不清楚。您可以使用pack将帧
直接放在搜索
下。为什么您认为需要使用place
?回答关于布局的模糊问题的问题是,布局在很大程度上取决于窗口中的其他内容。如果只有这两个小部件,那么就没有理由使用place
,除非您的目标是使代码尽可能复杂。