我试图在tkinter中构建一个小窗口,但我观察到即使设置为相同的宽度,不同的widget也会采用不同的宽度。下面是我在运行代码时看到的输出:
第一行中的黑色小部件是Entry小部件,声明如下**(width=30)**:
entry=Entry(root,width=30,font=('arial',14,'bold'),bd=0,bg='black',fg='white')
entry.grid(row=0,column=0,padx=0,pady=0,ipadx=0,ipady=0,columnspan=10)
第二行中的彩色小部件是如下定义的标签小部件**(width=3 * 10 widgets = 30)**:
label=Label(root,width=3,font=('arial',14,'bold'),bg=<different_colors>)
label.grid(row=1,column=<increasing columns>,padx=0,pady=0ipadx=0ipady=0)
第三行中的紫色小部件也是一个标签小部件,定义如下**(width=30)**:
biglabel=(root,width=30,font=('arial',14,'bold'),bg='purple')
biglabel.grid(row=2,column=0,padx=0,pady=0ipadx=0ipady=0,columnspan=10)
根据上面提到的宽度,所有3行不是都应该是相同的宽度吗?但是从输出图像中可以看到,所有3行的宽度都不同。
问题:
1.有人能解释一下这种行为的原因吗?
1.如何使不同的小部件在整个应用程序中遵循网格/使用什么而不是宽度来确定性地使它们具有相同的大小?因为我需要根据条目中键入的内容添加小部件,并且不希望它具有不同的大小。现在窗口扩展以容纳第二行,当第二行在条目中键入内容后添加时。可以通过在这里在线执行我的代码来查看交互式输出:https://replit.com/@KCKotak/TKinter-experiment#main.py
要测试的完整代码示例:
from tkinter import *
root=Tk()
def add_text_label(r=0,c=0,bgcolor='white'):
text_label=Label(root, width=3, font=('arial',14,'bold'), bg=bgcolor)
text_label.grid(row=r,column=c,padx=0,pady=0,ipadx=0,ipady=0)
root.geometry('-15-35')
root.title('experiment')
root.config(bg='white')
# first row: black entry as seen in output image. **width=30**
text_entry=Entry(root,width=30,font=('arial',14,'bold'),bd=0,bg='black',fg='white')
text_entry.grid(row=0,column=0,padx=0, pady=0,ipadx=0,ipady=0,columnspan=10)
# second row: colorful labels. **width=3 x 10 = 30**
add_text_label(1,0,'red')
add_text_label(1,1,'blue')
add_text_label(1,2,'yellow')
add_text_label(1,3,'orange')
add_text_label(1,4,'green')
add_text_label(1,5,'red')
add_text_label(1,6,'blue')
add_text_label(1,7,'yellow')
add_text_label(1,8,'orange')
add_text_label(1,9,'green')
# third row: purple label. **width=30**
big_label=Label(root, width=30, font=('arial',14,'bold'), bg='purple')
big_label.grid(row=2,column=0,padx=0, pady=0,ipadx=0,ipady=0,columnspan=10)
root.mainloop()
1条答案
按热度按时间9rnv2umw1#
有人能解释一下这种行为的原因吗?
简单来说,
Entry
和Label
小部件并不相同,并且某些选项可能具有不同的值。例如,Entry
小部件默认的highlightthickness
为1,但Label
的相同选项可能为零。此外,标签有一个padx
和pady
选项,默认情况下可能为非零。Entry
小部件没有此选项。如果将
borderwidth
和highlightthickness
设置为0
(零),并在Label
小部件上将padx
设置为零,然后一切都可能排队。在我的机器上,我仍然得到一个2像素的差异之间的第一行和其他两行。可能有另一种选择我'我忘记了,或者它可能只是一个Entry
小部件自然会比Label
稍大。如何使不同的小部件遵循整个应用程序的网格
使用
sticky
属性,以便小部件填充分配给它们的空间。您还可以在所有列上使用uniform
和weight
选项,以强制它们具有完全相同的宽度。例如:注意:
uniform
("a"
)的具体值无关紧要。唯一重要的是所有列使用相同的值。