Tkinter Grid布局:按钮与标签行间距未达预期的原因及解决方法
Tkinter Grid布局控件间距问题的原因及解决方法
问题原因
Tkinter的Grid布局里,未放置控件的行默认高度为0。你把标签设在第1行,按钮设在第7行,但第2到第6行是空的,这些行的高度会被压缩成0,所以视觉上两个控件就贴在一起,看起来像按钮在第3行。
解决方法
方法1:给中间空行设置最小高度
给mainframe的第2到第6行设置最小高度,让这些行占据空间:
# 在按钮代码后添加 for row in range(2, 7): mainframe.rowconfigure(row, minsize=20) # 20是每行最小高度,可根据需求调整
方法2:给按钮加垂直外边距
直接在按钮的grid配置里设置pady,通过外边距拉开和标签的距离:
button.grid(column=3, row=7, sticky=tk.S, pady=(120, 5)) # 第一个值是顶部间距,第二个是底部间距,按需调整
方法3:用空控件填充中间行
在第2到第6行的对应列放个空标签/框架,让这些行有内容从而保持高度:
for row in range(2, 7): ttk.Label(mainframe).grid(row=row, column=3) # 在第3列的中间行放置空标签
修改后的完整代码(以方法1为例)
import tkinter as tk from tkinter import ttk root = tk.Tk() root.title("Your App crawler") mainframe = ttk.Frame(root) mainframe.grid(column=0, row=0, sticky=('N')) root.columnconfigure(0, weight=1) root.rowconfigure(0, weight=1) feet = tk.StringVar() feet_entry = ttk.Entry(mainframe, width=21, textvariable=feet) feet_entry.grid(column=0, row=1, sticky=(tk.N), ipadx=100) feet_entry.focus() ttk.Label(mainframe, text="enter url ").grid(column=3, row=1, sticky=('N')) def crawler(): pass button = ttk.Button(mainframe, text="scrape", command=crawler) button.grid(column=3, row=7, sticky=tk.S) root.bind("<Return>", crawler) # 配置中间行最小高度,实现间隔 for row in range(2, 7): mainframe.rowconfigure(row, minsize=20) for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5) root.mainloop()
内容的提问来源于stack exchange,提问作者xlmaster
相关产品推荐
相关产品推荐

