Tkinter中Entry组件随窗口水平自适应调整问题求助
解决Tkinter Entry组件随窗口水平缩放的问题
嘿,我刚好碰到过这个问题!你已经给Entry设置了sticky=W+E,但为啥窗口缩放时它还是不动?因为你漏了给列设置权重这关键一步——Tkinter的grid布局默认所有列的权重都是0,意思是窗口大小变化时,这些列不会分配到额外的空间。
问题根源
sticky=W+E只是让Entry在它所在的列里左右填满,但如果列本身不跟着窗口变宽,Entry自然也没法拉伸。所以我们需要告诉grid:当窗口水平缩放时,把多余的空间分配给Entry所在的列。
修改方案
只需要在你的代码里加一行,给Entry所在的列(也就是第1列,因为label在第0列)设置权重为1:
from tkinter import Tk, Entry, Label, StringVar, W, E, N, S class Test: def __init__(self, master): # Variable definitions self.master = master self.var1 = StringVar() # 关键:给第1列设置权重,让它随窗口缩放 self.master.columnconfigure(1, weight=1) # Element definitions self.label1 = Label(text="Dummy test") self.entry1 = Entry(master, textvariable=self.var1) # Grid placement self.label1.grid(row=0, column=0, sticky=W) self.entry1.grid(row=0, column=1, sticky=W+E) root = Tk() Test(root) root.mainloop()
详细解释
columnconfigure(1, weight=1):这里的1是列的索引,weight=1表示当窗口有额外水平空间时,这一列会接收所有的额外空间(如果有多个列设置了权重,会按权重比例分配)。- 配合
sticky=W+E:Entry会自动填满所在列的宽度,所以列变宽时,Entry就跟着拉伸了。
如果你的界面有多行多列,也可以用同样的方式给其他列或行设置权重,来实现更复杂的缩放效果~
内容的提问来源于stack exchange,提问作者user2261062
相关产品推荐
相关产品推荐

