如何在Tkinter指定区域创建自定义尺寸框架并放置组件
解决Tkinter红色框架内组件消失及方形按钮实现问题
问题根源
- 你当前的
frm_display挂载在绿色的frm_main上,而非目标红色frm_filter,与需求不符。 - 未对
frm_filter的网格行列做配置,即便放入组件,也会因布局规则无法正常显示。 frm_display尺寸设置过小(10x20),即便显示也难以被观察到。
修正后的完整代码
import tkinter as tk import webbrowser def open_link(url): # 点击按钮打开指定链接 webbrowser.open(url) window = tk.Tk() window.geometry("1800x1000") IngredientList = [] # 主框架:红色过滤器框架、绿色主内容框架 frm_filter = tk.Frame(master=window, bg="red", height=500, width=300) frm_main = tk.Frame(master=window, bg="green", height=1000, width=1000) # 禁用框架尺寸自动调整,保持设定宽高 frm_main.grid_propagate(False) frm_filter.grid_propagate(False) # 主窗口的行列配置 window.columnconfigure(0, weight=1, minsize=75) window.columnconfigure(1, weight=1, minsize=200) window.rowconfigure(1, weight=1) # 确保行适配窗口拉伸 # 放置主框架 frm_filter.grid(row=1, column=0, sticky="nsew") frm_main.grid(row=1, column=1, sticky="nsew") # -------------------------- 红色框架内的子框架与按钮实现 -------------------------- # 配置红色框架的3行3列网格,用于放置等尺寸按钮 for i in range(3): frm_filter.columnconfigure(i, weight=1) frm_filter.rowconfigure(i, weight=1) # 按钮文本与对应链接 button_info = [ ("按钮1", "https://example.com/1"), ("按钮2", "https://example.com/2"), ("按钮3", "https://example.com/3"), ("按钮4", "https://example.com/4"), ("按钮5", "https://example.com/5"), ("按钮6", "https://example.com/6"), ("按钮7", "https://example.com/7"), ("按钮8", "https://example.com/8"), ("按钮9", "https://example.com/9"), ] # 批量创建等尺寸方形按钮并绑定跳转事件 for idx, (text, url) in enumerate(button_info): row = idx // 3 col = idx % 3 btn = tk.Button(frm_filter, text=text, command=lambda u=url: open_link(u)) btn.grid(row=row, column=col, sticky="nsew", padx=2, pady=2)
关键说明
- 组件挂载目标:所有要放入红色框架的组件,
master必须设为frm_filter。 - 网格行列配置:给
frm_filter的行列设置weight=1,确保子组件能自动填充对应单元格,实现等尺寸效果。 - 按钮尺寸控制:按钮的
sticky="nsew"属性会让它填满所在网格单元格,配合框架行列配置得到方形按钮。 - 链接跳转处理:用
lambda表达式给每个按钮绑定独立链接,避免循环中变量被覆盖的问题。
内容的提问来源于stack exchange,提问作者fiery xgamer
相关产品推荐
相关产品推荐

