如何获得Label的真实当前大小?

时间:2014-07-27 09:34:28

标签: python tkinter

我在根窗口中有一个Frame(根窗口大小是通过.geometry()设置的),其中我有两个Label填充Frame。我想知道Label的当前大小,以便调整其文本的字体大小。

I tried .winfo_reqheight()但我无法理解返回的值。以下示例举例说明了我面临的问题(三个问题以粗体显示):

import Tkinter as tk

root = tk.Tk()
root.geometry("200x200")
# top level frame, containing both labels below. Expands to fill root
f = tk.Frame(root)
f.pack(expand=True, fill=tk.BOTH)
# the condition for the two cases mentioned in the text below
if True:
    text = ""
else:
    text = "hello\nhello\nhello\nhello"
# two labels, the top one's txt will be changed
l1 = tk.Label(f, text=text, font=('Arial', 40), background="green")
l1.pack(expand=True, fill=tk.BOTH)
l2 = tk.Label(f, text="hello", font=('Arial', 15), background="blue")
l2.pack(expand=True, fill=tk.BOTH)
# just in case, thank you https://stackoverflow.com/users/2225682/falsetru
for i in [f, l1, l2]:
    i.update_idletasks()
print("top label: reqheight = {0} height = {1}, bottom label: reqheight = {2} height = {3}".format(
    l1.winfo_reqheight(), l1.winfo_height(),
    l2.winfo_reqheight(), l2.winfo_height()
))
root.mainloop()

案例1:条件设置为True(空文本字符串)

enter image description here

和输出

top label: reqheight = 66 height = 1, bottom label: reqheight = 29 height = 1

所有小部件都设置为展开,所以当窗口高200像素时,他们的总高度是66 + 29 = 95怎么样?

如何获得i)的高度为空,ii)填充两种方式和iii)展开Label - 我将保留作为参考(如果{{ 1}}增长我会知道它不能超过那个参考)?

案例2:条件为Label(多行文本字符串)

enter image description here

False

为什么顶级标签会破坏底部标签?是否有一种机制可以尽可能地扩展'但是可以改变其他小部件?&#39 ;

1 个答案:

答案 0 :(得分:0)

reqheight请求高度 - 标签想要的高度,无论它放在窗口中的方式如何。它是几何管理器询问时所要求的大小"您需要多少空间?"。根据您使用包,地点或网格的方式或包含窗口的大小,此值不会发生变化。

如果您想要实际身高,请使用winfo_height