You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CustomTkinter表单中动态添加食材输入字段?

动态添加食材输入框的CustomTkinter实现方案

需求概述

使用CustomTkinter开发程序,实现以下功能:

  • 初始提供一个食材输入框
  • 用户可点击按钮在现有输入框下方添加新的输入框,保留原有输入框
  • 支持编辑所有输入框内容,最后一次性提交保存所有食材数据

实现代码

基于你提供的基础代码,修改后实现动态添加和提交功能:

import customtkinter as ctk

ctk.set_appearance_mode("Dark")
ctk.set_default_color_theme("dark-blue")

class root(ctk.CTk):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        
        self.title("GenSoft")
        self.geometry("800x480")
        self.resizable()
        self.state("normal")
        self.iconbitmap()

        self.grid_columnconfigure(1, weight=1)
        self.grid_columnconfigure((2, 3), weight=0)
        self.grid_rowconfigure((0, 1, 2), weight=1)

        self.tabview = ctk.CTkTabview(self,
                             width=800,
                             height=480,
                             corner_radius=20,
                             fg_color="#ffffff",
                             segmented_button_selected_color="red",
                             segmented_button_fg_color="black",
                             segmented_button_selected_hover_color="green",
                             segmented_button_unselected_hover_color="green")
        self.tabview.pack(padx=20, pady=20)
        self.tabview.add("Home")
        self.tabview.add("New Recipe")
        self.tabview.add("Saved Recipe")
        self.tabview.tab("Home").grid_columnconfigure(0, weight=1)
        self.tabview.tab("New Recipe").grid_columnconfigure(0, weight=1)
        self.tabview.tab("Saved Recipe").grid_columnconfigure(0, weight=1)

        # 存储所有食材输入框的列表
        self.ingredient_entries = []
        
        # 创建第一个输入框
        self.add_ingredient_entry()

        # 添加"添加食材"按钮
        self.add_btn = ctk.CTkButton(self.tabview.tab("New Recipe"),
                                     text="添加食材",
                                     command=self.add_ingredient_entry)
        self.add_btn.pack(padx=20, pady=(0,10))

        # 添加"提交食材"按钮
        self.submit_btn = ctk.CTkButton(self.tabview.tab("New Recipe"),
                                        text="提交食材",
                                        command=self.submit_ingredients)
        self.submit_btn.pack(padx=20, pady=10)

    def add_ingredient_entry(self):
        # 创建新的输入框并添加到tab中
        entry = ctk.CTkEntry(self.tabview.tab("New Recipe"),
                             placeholder_text="ingredient")
        entry.pack(padx=20, pady=5)
        # 将输入框加入列表
        self.ingredient_entries.append(entry)

    def submit_ingredients(self):
        # 收集所有输入框的内容,过滤空值
        ingredients = [entry.get().strip() for entry in self.ingredient_entries if entry.get().strip()]
        # 这里可以替换为保存到文件/数据库的逻辑
        print("提交的食材列表:", ingredients)
        # 可选:清空所有输入框
        # for entry in self.ingredient_entries:
        #     entry.delete(0, ctk.END)

if __name__ == "__main__":
    app = root()
    app.mainloop()

关键实现要点

  • 使用列表self.ingredient_entries存储所有动态创建的输入框,方便后续统一获取内容
  • add_ingredient_entry方法负责创建新的CTkEntry组件并添加到目标tab中,同时加入列表
  • submit_ingredients方法遍历列表收集所有输入框的有效内容,完成提交逻辑

需查阅的CustomTkinter文档部分

  • CTkEntry组件:了解输入框的创建参数、get()/delete()等方法,用于获取和编辑内容
  • CTkButton组件:学习按钮的事件绑定(command参数),实现点击触发添加/提交动作
  • 布局管理(pack/grid):掌握动态添加组件时的布局方式,确保新组件正确显示在父容器中
  • 容器组件(如CTkTabview的tab):了解如何向tab这类容器中动态添加子组件

内容的提问来源于stack exchange,提问作者C0untV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 04:30:54