Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 Tkinter:添加标签会更改其边框的高度_Python 2.7_Tkinter - Fatal编程技术网

Python 2.7 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

我正在玩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, 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
现在,您需要进行以下调整:

  • 因此,可以为每个帧添加两个宽度为5的水平帧。一个在顶部框架下方,另一个在底部框架上方

  • 您可以创建最后一帧,其宽度为10像素,将
    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:你的问题是“为什么高度会改变?”,而不是“如何使标签居中?”。我将添加您要求的信息,但请确保当您提出问题时,您真正询问的是您试图解决的问题,而不是其他问题。