Tkinter中如何让下方LabelFrame随窗口拉伸且与上方无空隙(grid布局)
Tkinter Grid布局问题:让下方LabelFrame随窗口拉伸且无空隙
我是Tkinter新手,正在开发一个用户名(moniker)查询工具的前端。使用grid布局时,尝试通过sticky属性让组件随窗口尺寸调整拉伸,但当前拉伸窗口向下时,上方和下方的LabelFrame之间出现多余空隙。期望下方LabelFrame随窗口拉伸,且不与上方框架产生空隙:已为下方框架设置sticky="nsew",但若为上方框架设置sticky south会导致其也随窗口向下拉伸。
相关代码
def query_window(conn): window.destroy() q_window = Tk() q_window.title('Moniker Lookup') q_window.columnconfigure(0, weight=1) q_window.rowconfigure(0, weight=1) path = os.path.realpath( os.path.join(os.getcwd(), os.path.dirname(__file__))) icon = PhotoImage(file = path + "..\\assets\\main_icon.png") q_window.iconphoto(False, icon) #q_window.geometry("700x700") #Create a search frame for the moniker search to sit in search_frame = tk.LabelFrame(q_window, text='Moniker Search') search_frame.rowconfigure(0, weight=1) search_frame.columnconfigure(0, weight=1) search_frame.grid(row = 0, column=0, pady=GLOBAL_PAD_Y, padx=GLOBAL_PAD_X, sticky="nw") #Create a results frame for the treeview widget to sit in. output_frame = tk.LabelFrame(q_window, text='Results') output_frame.rowconfigure(0, weight=1) output_frame.columnconfigure(0, weight=1) output_frame.grid(row = 1, column=0, pady=GLOBAL_PAD_Y, padx=GLOBAL_PAD_X, sticky="nsew") #Create area for user to provide Moniker moniker_label = tk.Label(search_frame, text="Moniker:") moniker_label.grid(row=0, column = 2, pady = GLOBAL_PAD_Y, padx = GLOBAL_PAD_X) moniker_field = tk.Entry(search_frame) moniker_field.grid(row=0, column = 3, pady=GLOBAL_PAD_Y, padx=GLOBAL_PAD_X, columnspan=2) #Create a run button run_button = tk.Button(search_frame, text="Run", command=lambda: moniker_query(moniker_field, conn, q_window), width=10) run_button.grid(row=0, column = 5, pady = GLOBAL_PAD_Y, padx = GLOBAL_PAD_X) #Create a treeview to display output tv1 = ttk.Treeview(output_frame) tv1.columnconfigure(0, weight=1) tv1.rowconfigure(0, weight=1) #Create the tree scrolls tree_scroll_y = tk.Scrollbar(output_frame, orient = "vertical", command=tv1.yview) tree_scroll_x = tk.Scrollbar(output_frame, orient="horizontal", command=tv1.xview) tv1.configure(xscrollcommand=tree_scroll_x.set, yscrollcommand=tree_scroll_y.set) tv1.grid(row=0, column=0, pady = GLOBAL_PAD_Y, padx = GLOBAL_PAD_X, sticky="nsew") tree_scroll_x.grid(row=1, column=0, sticky=tk.E+tk.W) tree_scroll_x.grid_rowconfigure(0, weight=1) tree_scroll_y.grid(row=0, column=1, sticky=tk.N+tk.S) tree_scroll_x.grid_columnconfigure(0, weight=1)
窗口状态截图
- 默认状态:

- 拉伸后状态:

解决方案
问题核心在于主窗口的行权重配置错误,以及上方框架的sticky属性设置不当。修改步骤如下:
- 调整主窗口的行权重:
将主窗口的行配置代码:
q_window.rowconfigure(0, weight=1)
替换为:
q_window.rowconfigure(0, weight=0) # 上方框架不分配垂直方向额外空间,保持固定高度 q_window.rowconfigure(1, weight=1) # 下方框架分配所有垂直额外空间,随窗口拉伸
- 修改上方框架的sticky属性:
将search_frame.grid的sticky参数从"nw"改为"ew",让上方框架仅在水平方向拉伸,垂直方向保持原高度:
search_frame.grid(row = 0, column=0, pady=GLOBAL_PAD_Y, padx=GLOBAL_PAD_X, sticky="ew")
修改完成后,拉伸窗口时上方搜索框架会水平铺满窗口,高度固定;下方结果框架会填充所有垂直方向的额外空间,两者之间不会出现空隙。
内容的提问来源于stack exchange,提问作者Buzzkillionair
相关产品推荐
相关产品推荐

