如何在Tkinter中使用Grid布局搭配Textbox?避免字号影响网格
解决Tkinter Grid布局中Text组件字号干扰布局的问题
问题分析
即便使用了uniform="a"统一网格权重,Text组件仍会因字号、内容的固有尺寸优先于grid的weight配置,导致单元格被异常撑开,破坏布局结构。
具体解决方案
固定Text组件尺寸:通过
width和height属性直接限制Text的显示大小,让它不再自动拉伸所在单元格。修改后的Text初始化代码:text = tk.Text(font=("Courier",15), bg=colour, borderwidth=1, relief="solid", width=20, height=5)这里
width对应字符数,height对应行数,可根据需求调整。关闭网格尺寸传播:对主窗口调用
grid_propagate(False),强制窗口严格按照column/row的weight配置分配空间,忽略组件的固有尺寸:wd.grid_propagate(False)若窗口需要自适应其他内容,可只对Text所在的子容器调用该方法,而非主窗口。
检查网格配置一致性:确保所有参与布局的列/行都在同一个
uniform组中,避免部分列不受权重控制。你当前给column1单独设置了weight=13,需确认它和其他列的uniform组一致,否则会打破布局平衡。
调试效果截图

修改后的完整代码示例
# define a grid number_tuple_30 = (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29,30) number_tuple_45 = (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45) wd.columnconfigure(number_tuple_30, weight=10, uniform="a") wd.rowconfigure(number_tuple_45, weight=10, uniform="a") wd.columnconfigure(1, weight=13, uniform="a") # 关闭尺寸传播,强制按grid配置布局 wd.grid_propagate(False) # textbox - 固定尺寸 text = tk.Text(font=("Courier",15), bg=colour, borderwidth=1, relief="solid", width=20, height=5) text.grid(column=0, row=39, sticky="nesw", columnspan=9, rowspan=7)
内容的提问来源于stack exchange,提问作者Mike Nijland
相关产品推荐
相关产品推荐

