python - 有没有办法让一个地方小部件始终相对于另一个小部件(例如 Pack)
问题描述
所以,我使用 place 方法让一个小部件与其他小部件重叠,但它的位置与winfo
使用 pack 的小部件是相对的(with )。当父框架调整大小时,包位置会改变,但放置位置不会改变。这是我的代码:
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 位置。Entry 小部件将用作搜索栏,我希望在其下自动完成。条目小部件下会有小部件,并且自动完成只会在您输入时出现(但这不是我想要的。如果您需要它,它只是更多的说明)。那么,有没有办法让 place 小部件始终相对于 pack 小部件。如果有答案,谢谢:)
解决方案
如果您的目标是将一个小部件相对于另一个小部件,place
让您这样做。它非常适合工具提示或其他不适合正常布局的临时小部件。
最简单的方法是使小部件成为控制小部件的子级。例如,对于要相对于搜索框放置的框架,您可以使其成为搜索框的子级。如果这样做不方便,您可以使用in_
参数来判断place
哪个小部件是另一个小部件。
例如,要将您的标签框放在搜索框的正下方并与搜索框具有相同的宽度,您可以这样做:
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 个像素添加到计算的位置,使其浮动在窗口下方一点relwidth=1.0
:使框架的宽度为搜索框宽度的 100%。
显然你不必使用y=5
,我只是添加它来说明使用rely
and的附加行为y
。
推荐阅读
- angular6 - 如何将 html 从组件附加到角度 6 中的另一个组件
- python-3.x - 如何使图像更具对比度,灰度然后完全使用 PIL 和 pytesseract 获得所有字符?
- azure - 如何将 2 个团队集合从 tfs 迁移到 azure devops 服务中的一个组织?
- python - 仅将列表中的多个相似项目替换为 1
- javascript - 如何获取突出显示的单词的索引?
- python - 从 MATLAB 到 Python 的 2D FFT
- python - 如何返回包含数字和字母的字符串中的最大整数?
- python - 使用 Opencv Python 进行面部识别
- html - 媒体查询不起作用和最大宽度问题
- ruby - 如何在 Factorybot 中为具有nested_attributes 的模型创建工厂