为什么winfo_width()返回的按钮小部件的大小大于其实际大小?

时间:2019-05-21 06:07:18

标签: python python-3.x tkinter

我希望同一列中的按钮/标签与特定/第一个按钮/标签共享相同的宽度。问题是winfo_width()似乎不返回我想要的东西。 winfo_width()的返回值是按钮的数倍。

我不想用我选择的数字来固定宽度。因此,我没有找到解决问题的方法。

这是我的代码的一部分:

button_1.update_idletasks()
print(button_1.winfo_width())
new_label = Label(frame_1, bg=  "#8432C7", width = 30, height = 5)
new_label.grid(row = 2, column = 0)

由于我在发布图片方面没有10个声誉,因此以下是生成的界面的链接:

enter image description here

如果可以看到上面的图像,则应该发现下部标签(宽度= 30)大于上部按钮(宽度= 157吗?)。

但是,根据我的尝试,157似乎不是button_1的宽度。我对winfo_width()到底返回什么感到困惑。因此,我想知道winfo_width()返回什么(为什么winfo_width()返回157,该数字应该小于30)以及如何获取按钮的确切宽度。

自从我最近才开始学习Tkinter以来,我在这里停留了一个小时。 预先感谢任何可以给我建议的人。

2 个答案:

答案 0 :(得分:2)

有趣的事实:您根本不必为此烦恼。

sticky窗口小部件上只需传递grid

import tkinter as tk

root = tk.Tk()

button_1 = tk.Button(root,text="button_1")
button_1.grid(row = 1, column = 0, sticky="ew")
new_label = tk.Label(root, bg=  "#8432C7", height = 5)
new_label.grid(row = 2, column = 0, sticky="ew")

root.mainloop()

然后您的列将自动调整并缩放为相同大小。

答案 1 :(得分:1)

这是因为参数中用于创建按钮的宽度与tkinter使用的单位不同。

  

从tkinter中的Button的{​​{3}}开始。宽度为The width of the button. If the button displays text, the size is given in text units. If the button displays an image, the size is given in pixels (or screen units). If the size is omitted, or zero, it is calculated based on the button contents. (width/Width)

您会发现,如果使用tkinters .place()设置大小,则.winfo_width()返回的大小将相同。

例如:

button_1.update_idletasks()
print(button_1.winfo_width())
new_label = Label(frame_1, bg=  "#8432C7")
new_label.place(x=40, y=0, width=157, height=20)

您会发现new_label现在具有与按钮相同的宽度