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

如何读取.kv文件自定义类内组件文本值到.py文件函数中

问题核心原因

你原有代码的问题在于:在create_recipe方法里新实例化的AddIngToRecipe是完全独立的新对象,和你之前添加到界面里的实例没有任何关联;同时ingredientforRecipe是存放所有AddIngToRecipe实例的GridLayout容器,不能直接通过它的ids查找子控件内部的qtyRe。


解决方法

第一步:完善AddIngToRecipe类的取值方法

修改main.py里的AddIngToRecipe类,新增方法直接返回当前实例的三个目标值:

class AddIngToRecipe(FakeRectangularElevationBehavior, FloatLayout, TouchBehavior):
    names = ObjectProperty()
    unit = ObjectProperty()
    # 新增取值方法
    def get_ingredient_info(self):
        return {
            "name": str(self.names),
            "unit": str(self.unit),
            "quantity": self.ids.qtyRe.text.strip()
        }

第二步:遍历容器读取所有动态添加的食材信息

你添加到界面里的所有AddIngToRecipe实例,都存放在createRecipe屏幕的ingredientforRecipe容器的children属性中,遍历即可读取所有实例的数值,修改PieceofCake类的create_recipe方法:

class PieceofCake(MDApp, Screen):
    def create_recipe(self, Renames, Recomment):
        # 先拿到createRecipe屏幕的食材容器
        create_recipe_screen = self.root.get_screen('createRecipe')
        ingredient_container = create_recipe_screen.ingredientforRecipe
        
        all_ingredients = []
        # 遍历容器内所有AddIngToRecipe实例,如果需要按添加顺序读取,加reversed反转children
        for ing_widget in reversed(ingredient_container.children):
            if isinstance(ing_widget, AddIngToRecipe):
                ing_info = ing_widget.get_ingredient_info()
                all_ingredients.append(ing_info)
                # 测试打印单条食材信息
                print(f"食材名:{ing_info['name']},单位:{ing_info['unit']},数量:{ing_info['quantity']}")
        
        # 后续自定义处理逻辑
        print(Renames)
        print(Recomment)

可选优化方案

如果不想每次都遍历容器,也可以在添加实例的时候把实例存到App类的全局列表里,后续直接读取列表即可:

# 在App初始化时新增存储列表
self.added_ing_list = []

# 调用add_widget的地方修改为:
new_ing = AddIngToRecipe(names=names, unit=unit)
self.added_ing_list.append(new_ing)
screen_manager.get_screen('createRecipe').ingredientforRecipe.add_widget(new_ing)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:06:03