Python 2.7 Tkinter:添加标签会更改其边框的高度
我正在玩Tkinter添加帧和标签到这些帧。请在下面查找代码:Python 2.7 Tkinter:添加标签会更改其边框的高度,python-2.7,tkinter,Python 2.7,Tkinter,我正在玩Tkinter添加帧和标签到这些帧。请在下面查找代码: from Tkinter import * root = Tk() root.title('Example of Tkinter module') root.geometry('{}x{}'.format(800,600)) frame_top = Frame(root, width=800, height=120, bg="#154e72") frame_left = Frame(root, width=240, h
from Tkinter import *
root = Tk()
root.title('Example of Tkinter module')
root.geometry('{}x{}'.format(800,600))
frame_top = Frame(root, width=800, height=120, bg="#154e72")
frame_left = Frame(root, width=240, height=420, bg="#154e72")
frame_right = Frame(root, width=550, height=420, bg="#9dc8e3")
frame_bottom = Frame(root, width=800, height=50, bg="#154e72")
root.grid_rowconfigure(1,weight=1)
root.grid_columnconfigure(0,weight=1)
frame_top.grid (row=0,sticky="ew")
frame_left.grid (row=1,sticky="w")
frame_right.grid(row=1,sticky="e")
frame_bottom.grid(row=2,sticky="ew")
label_1 = Label(frame_top, text="text label",bg="#154e72")
frame_top.grid_rowconfigure(1,weight=1)
frame_top.grid_columnconfigure(0,weight=1)
#label_1.grid(sticky="w")
root.mainloop()
如果运行代码时注释了标签_1.grid(sticky=“w”)行,则结果为:
如果我尝试显示标签,情况会发生如下变化:
我做错了什么?Python版本2.7.11。我也试着打包,结果是一样的
编辑:
就像我在思考之前发布的那样,我基本上忽略了真正的问题。下面是:
如何将标签放置在框架顶部,并将框架高度保持在120px左右?原因是tkinter的“收缩以适应”行为。将标签添加到顶部框架时,顶部框架将调整自身大小,使其高度刚好适合其内容。如果删除标签,但将顶部框架的高度设置为25,则可以获得完全相同的视觉行为 当顶部框架重置为较小的高度时,所有额外空间将分配给第1行(根据您的重量选项)。因为你是如何把框架放在第1行,因为它们不够高,不能填满空间,而且因为它们不粘在空间的顶部或底部,所以它们看起来浮在第1行的中间。
如果您的主要目标是简单地拥有一个居中的标签(基于对此答案的注释),那么您可以在使用
pack
或grid
时在标签上添加一些填充。您的另一个选择是使用place
,它没有“收缩以适应”行为
这里有一个使用pack
的解决方案,适用于您实际上不关心区域的确切高度,只关心一点垂直填充的情况:
label_1.pack(side="top", pady=50)
如果您的要求确实是要有一个精确的120像素高的顶部区域,并且您需要一个以该区域为中心的标签,place
是一个不错的选择,因为它允许相对放置:
label_1.place(relx=.5, rely=.5)
通过考虑以下注意事项,可以将框架顶部的高度保持为120:
- 根的高度为600,但其他帧的高度之和为420+120+50=590
根的宽度为800,而左右帧的宽度之和为550+240=790
frame\u left
和frame\u right
分开frame\u top
和frame\u按钮,必须使用columnspan
选项
不要忘记为其余框架指定列编号
框架顶部
上应用方法from Tkinter import *
root = Tk()
root.title('Example of Tkinter module')
root.geometry('{}x{}'.format(800,600))
frame_top = Frame(root, width=800, height=120, bg="#154e72")
frame_left = Frame(root, width=240, height=420, bg="#154e72")
frame_right = Frame(root, width=550, height=420, bg="#9dc8e3")
frame_bottom = Frame(root, width=800, height=50, bg="#154e72")
horizontal_frame_1 = Frame(root, width=800, height=5)
horizontal_frame_1.grid(row=1, columnspan=2, sticky='ew')
root.grid_rowconfigure(1,weight=1)
root.grid_columnconfigure(0,weight=1)
frame_top.grid (row=0, columnspan=3, sticky="ew")
vertical_frame = Frame(root, width=10, height=420)
vertical_frame.grid(row=2, column=1)
frame_left.grid (row=2, column=0, sticky="w")
frame_right.grid(row=2, column=2, sticky="e")
horizontal_frame_2 = Frame(root, width=800, height=5)
horizontal_frame_2.grid(row=3, columnspan=3)
frame_bottom.grid(row=4, columnspan=3, sticky="ew")
label_1 = Label(frame_top, text="text label",bg="#154e72")
label_1.grid(sticky="w")
frame_top.grid_propagate(0)
root.mainloop()
演示
这就是您一直在寻找的:
你到底有什么问题?@ParvizKarimli希望顶部框架保持120px的高度,即使上面有标签。你用
label_1.grid(sticky=“w”)
得到你需要的东西了吗?不,它会改变顶部框架的高度。为什么你需要顶部精确地保持120像素的高度?当你让tkinter根据一个区域的高度来决定一个区域应该有多高时,tkinter工作得更好。还有,标题不应该是“…改变框架的高度”?好的,有没有办法在标签上保持高度120?理想情况下,我希望标签在顶部框架的左半部分垂直居中。Tkinter可能吗?有很多方法。可以强制将标签设置为该高度,可以使用填充,也可以禁用几何体传播。为什么顶部必须精确到120像素高?120有什么神奇之处?为什么不在标签上添加一些填充物,让tkinter根据当前字体计算出高度?@ERIK_-SON:如果你想让标签居中,你不在乎顶部是120、100还是130,但你确实想在标签周围留出一点空间,我的建议是做一些类似于label_1.pack(side=“top”,pady=50)的事情
如果您在回答中添加最后一条评论,我将接受该评论。谢谢你的帮助。@ERIK_SON:你的问题是“为什么高度会改变?”,而不是“如何使标签居中?”。我将添加您要求的信息,但请确保当您提出问题时,您真正询问的是您试图解决的问题,而不是其他问题。