有没有办法总是有一个地方小部件相对于另一个小部件(例如包)
Is There a Way to Always have a Place Widget Relative to Another Widget(Such as Pack)
所以,我使用 place 方法让一个小部件与其他小部件重叠,但它的位置是相对于(winfo
)使用 pack 的小部件。当父框架调整大小时,pack 位置会改变,但 place 位置不会。
这是我的代码:
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()
当 window 调整大小时,LabelFrame 保持在其 x 和 y 位置。 Entry 小部件将用作搜索栏,我希望在其下自动完成。条目小部件下会有小部件,自动完成只会在您键入时出现(不过这不是我要找的。如果您需要,它只是更多的说明)。那么,有没有办法让 place 小部件始终相对于 pack 小部件。如果您有任何答案,谢谢:)
如果您的目标是将一个小部件相对于另一个放置,place
可以让您做到这一点。它非常适合工具提示或其他不适合普通布局的临时小部件。
最简单的方法是使小部件成为控制小部件的子部件。例如,为了使您的框架相对于搜索框放置,您可以将其设为搜索框的子项。如果这样做不方便,您可以使用 in_
参数来告诉 place
哪个小部件是另一个小部件。
例如,要将 labelframe 放置在搜索框的正下方,并且与搜索框的宽度相同,您可以这样做:
frame.place(
in_=search,
bordermode="outside",
anchor="nw",
relx=0,
rely=1.0,
y=5,
relwidth=1.0
)
选项的含义如下:
in_=search
: 相对于搜索框放置框架
bordermode="outside"
: 相对测量是从边界的外侧(默认是“内侧”)
anchor="nw"
:放置小部件,使框架的西北角位于计算坐标
relx=0
: 将锚点放置在距搜索框左边缘0%的位置
rely=1.0
: 将框架置于搜索框高度的 100%
y=5
:向计算位置添加 5 个像素,使其浮动在 window 下方一点点
relwidth=1.0
: 使框架的宽度为搜索框宽度的100%。
显然你不必使用 y=5
,我只是添加它来说明使用 rely
和 y
.
的加法行为
所以,我使用 place 方法让一个小部件与其他小部件重叠,但它的位置是相对于(winfo
)使用 pack 的小部件。当父框架调整大小时,pack 位置会改变,但 place 位置不会。
这是我的代码:
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()
当 window 调整大小时,LabelFrame 保持在其 x 和 y 位置。 Entry 小部件将用作搜索栏,我希望在其下自动完成。条目小部件下会有小部件,自动完成只会在您键入时出现(不过这不是我要找的。如果您需要,它只是更多的说明)。那么,有没有办法让 place 小部件始终相对于 pack 小部件。如果您有任何答案,谢谢:)
如果您的目标是将一个小部件相对于另一个放置,place
可以让您做到这一点。它非常适合工具提示或其他不适合普通布局的临时小部件。
最简单的方法是使小部件成为控制小部件的子部件。例如,为了使您的框架相对于搜索框放置,您可以将其设为搜索框的子项。如果这样做不方便,您可以使用 in_
参数来告诉 place
哪个小部件是另一个小部件。
例如,要将 labelframe 放置在搜索框的正下方,并且与搜索框的宽度相同,您可以这样做:
frame.place(
in_=search,
bordermode="outside",
anchor="nw",
relx=0,
rely=1.0,
y=5,
relwidth=1.0
)
选项的含义如下:
in_=search
: 相对于搜索框放置框架bordermode="outside"
: 相对测量是从边界的外侧(默认是“内侧”)anchor="nw"
:放置小部件,使框架的西北角位于计算坐标relx=0
: 将锚点放置在距搜索框左边缘0%的位置rely=1.0
: 将框架置于搜索框高度的 100%y=5
:向计算位置添加 5 个像素,使其浮动在 window 下方一点点
relwidth=1.0
: 使框架的宽度为搜索框宽度的100%。
显然你不必使用 y=5
,我只是添加它来说明使用 rely
和 y
.