如何在Tkinter中设置元素的确切高度?

时间:2014-02-02 11:43:12

标签: python python-3.x tkinter

请帮助修复代码:

import Tkinter as tkinter

root = tkinter.Tk()
root.geometry("340x470") 

row5 = tkinter.Frame(root)
row5.pack(side = 'top', fill = 'x')
label5 = tkinter.Label(row5, text = 'Audio', width = 10, anchor='e')
label5.pack(side = 'left')
entry5 = tkinter.Text(row5, height = '4')
entry5.pack(side = 'right', fill = 'x', expand = 'yes')       

row6 = tkinter.Frame(root, borderwidth = 10, height = 20, bg = 'red')
row6.pack(side = 'top', fill = 'x')
button = tkinter.Button(row6, text = 'Send', height = 20, width = 20, relief = 'raised', cursor = 'hand1', font = ('times', 14, 'bold'))

button.pack()

root.mainloop()
问题是我要求“row6”高度为20,屏幕高度远大于20

2 个答案:

答案 0 :(得分:0)

按钮中的“高度”值测量文本行,而不是像素。所以你要求一个足够高的盒子来画20行文字。尝试将其减少到1或2:

button = tkinter.Button(row6, text = 'Send', height = 2, width = 20, relief = 'raised', cursor = 'hand1', font = ('times', 14, 'bold'))

答案 1 :(得分:0)

有两件事对你不利。首先,当您指定按钮的高度时,如果该按钮具有文本,则height属性指的是文本行。因此,按钮中的高度为20会要求按钮高20行。

其次,容器小部件(通常是Frames,但实际上是任何小部件)的默认行为是“缩小以适应”或“扩展以适应”它包含的所有内容。因此,即使您将帧的高度设置为20像素,它实际上也足以包含其所有子项。这是一件好事,你想要99.9%的时间。你应该避免尝试制作固定大小的窗口,而是让tkinter为你决定合适的尺寸。

这种扩展或收缩的特征称为“几何传播”。当您需要精确控制容器窗口小部件的大小时,可以关闭此行为。本网站上有几个例子说明如何做到这一点。但同样,它很少需要。