Tkinter中ScrolledText组件grid布局row值失效问题求助
解决Tkinter Grid布局中行参数不生效的问题
嘿,我明白你遇到的这个grid布局小困惑了!你设置了ScrolledText的row=3但它还是挤在Entry下面的第一行,这其实是Tkinter Grid布局的默认特性在搞鬼。
问题原因
Grid布局会自动忽略没有放置任何组件的空行——也就是说当你只在row0放了Entry,row1和row2完全是空的,Grid就会自动把row3的组件往上挪到第一个可用的空位置(也就是row1),不会为不存在组件的行预留空间。
解决办法
这里给你几个更优雅的方案,比加空组件好用多了:
方法1:用
pady直接添加间距(最简单)
不需要额外组件,直接在Entry或者ScrolledText的grid方法里设置pady参数,指定上下的间距。比如给Entry的下方留空隙:entSearch.grid(row=0, column=1, pady=(0, 30)) # 下方预留30像素空隙或者给ScrolledText的上方留空隙:
textw.grid(column=1, row=1, pady=(30, 0)) # 上方预留30像素空隙方法2:用
grid_rowconfigure预留空行空间
如果你想明确用行来控制间距,可以给中间的行设置最小高度,让Grid为它预留空间:# 给row1设置最小高度30像素,就算没有组件也会保留空隙 main.grid_rowconfigure(1, minsize=30) # 然后ScrolledText放在row2就会正常显示在空隙下方 textw.grid(column=1, row=2)方法3:添加空组件(你提到的方法)
这种方法虽然可行,但不如前两种优雅,比如在row1放一个空Label:Label(main).grid(row=1, column=1)
修改后的完整代码示例(用方法1)
from tkinter import * from tkinter import scrolledtext main = Tk() main.title("Grid Prob") main.geometry('750x750') text = StringVar() entSearch = Entry(main, textvariable=text, width=50, font='arial 12', highlightthickness=1) # 给Entry下方添加30像素间距 entSearch.grid(row=0, column=1, pady=(0, 30)) txt = """This is some text to be entered into the text widget. It should word wrap when the text exceeds the width of the widget.""" textw = scrolledtext.ScrolledText(main, width=70, height=33) textw.grid(column=1, row=1) # 现在直接放row1就有足够空隙了 textw.config(background="light grey", foreground="black", font='arial 12', wrap='word') textw.insert(END, txt) main.mainloop()
这样就能轻松在Entry和ScrolledText之间留出你想要的空隙啦~
内容的提问来源于stack exchange,提问作者Dave Mathews
相关产品推荐
相关产品推荐

