如何在GUI中通过按钮打开可编辑的独立窗口(Python Tkinter实现)
Tkinter 租赁系统GUI实现方案
核心修改思路
- 单个Tkinter程序仅保留1个
Tk()主窗口实例,子窗口统一使用Toplevel()创建,避免多窗口冲突 - 给按钮绑定的触发函数增加品类参数,通过
lambda语法给不同按钮绑定不同的参数值,就能实现点击不同按钮打开对应内容的页面 - 子窗口内的文本、复选框都可以直接按需求添加
Label、Checkbutton组件实现
完整可运行代码
from tkinter import * # 唯一主窗口实例 main_window = Tk() main_window.title("4 Dry Out e-Rental") # 提前配置每个品类对应的详情说明,后续调整内容直接修改这里即可 category_desc = { "Extractors/Cleaners": "设备特点:吸力强、适配多种清洁剂,适用于地毯、硬地面深度清洁\n租赁价格:75元/天,3天起租享9折优惠", "Air Movers/Fans": "设备特点:大风量、低噪音,可快速吹干地面、墙面水渍\n租赁价格:30元/天,5台以上团购享8折优惠", "Dehumidifers": "设备特点:日除湿量可达50L,适用于100平以内空间除湿\n租赁价格:120元/天,周租享85折优惠", "Air Filtration": "设备特点:三层过滤,可去除空气中的粉尘、异味和有害微生物\n租赁价格:90元/天,搭配除湿设备租赁立减20元/天", "Generators": "设备特点:额定功率5kW,噪音低、续航久,适合户外无供电场景使用\n租赁价格:200元/天,含基础燃油费" } # 打开子窗口的函数,接收品类名称作为参数 def open_category_window(category): # 创建子窗口 new_window = Toplevel(main_window) new_window.title(f"{category}租赁详情") # 子窗口标题 title_label = Label(new_window, text=category, font=("微软雅黑", 16, "bold")) title_label.pack(pady=10) # 子窗口正文内容,从提前配置的字典里取对应品类的说明 desc_label = Label(new_window, text=category_desc[category], justify=LEFT) desc_label.pack(padx=20, pady=10) # 生成订单用的复选框 check_btn = Checkbutton(new_window, text="确认选择该设备,加入订单") check_btn.pack(pady=10) # 还可以按需加租赁天数输入框、提交订单按钮等其他组件 # 主窗口标题 main_title = Label(main_window, text="4 Dry Out e-Rental 设备租赁系统", font=("微软雅黑", 18, "bold")) main_title.pack(pady=20) # 创建5个品类按钮,每个按钮绑定对应的品类参数 btn1 = Button(main_window, text="Extractors/Cleaners", width=30, command=lambda: open_category_window("Extractors/Cleaners")) btn1.pack(pady=5) btn2 = Button(main_window, text="Air Movers/Fans", width=30, command=lambda: open_category_window("Air Movers/Fans")) btn2.pack(pady=5) btn3 = Button(main_window, text="Dehumidifers", width=30, command=lambda: open_category_window("Dehumidifers")) btn3.pack(pady=5) btn4 = Button(main_window, text="Air Filtration", width=30, command=lambda: open_category_window("Air Filtration")) btn4.pack(pady=5) btn5 = Button(main_window, text="Generators", width=30, command=lambda: open_category_window("Generators")) btn5.pack(pady=5) # 仅保留一个主窗口的事件循环即可 main_window.mainloop()
扩展说明
如果需要调整某个品类的内容,直接修改category_desc字典里对应的文本即可;如果需要给子窗口加更多功能,比如提交订单按钮、输入租赁天数的输入框,直接在open_category_window函数里新增对应组件即可。
内容的提问来源于stack exchange,提问作者Lady
相关产品推荐
相关产品推荐

