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

Python KivyMD:如何将MDTextField文本传入已执行函数?

解决方案

方法1:利用类属性存储输入文本(推荐,适配KivyMD结构)

假设nov.py中的scr3页面是基于类定义的(如继承MDScreen),可将MDTextField的输入内容存储为类实例属性,调用parte_pandas时一并传入:

  1. 在Scr3类中定义输入框并绑定输入处理逻辑:
# nov.py中Scr3类的代码片段
from kivymd.uix.screen import MDScreen
from kivymd.uix.textfield import MDTextField
from kivymd.uix.button import MDRaisedButton

class Scr3(MDScreen):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        # 初始化存储多次输入的列表
        self.user_inputs = []
        
        # 创建输入框
        self.text_input = MDTextField(
            hint_text="输入查询内容",
            on_text_validate=self.save_input  # 按回车保存输入
        )
        self.add_widget(self.text_input)
        
        # 创建查询触发按钮
        self.query_btn = MDRaisedButton(
            text="执行AI查询",
            on_press=self.run_query
        )
        self.add_widget(self.query_btn)

    def save_input(self, instance):
        # 保存非空输入并清空输入框
        input_content = instance.text.strip()
        if input_content:
            self.user_inputs.append(input_content)
            instance.text = ""

    def run_query(self, instance):
        # 调用parte_pandas,传入DataFrame和用户输入列表
        # 假设df_a、df_b已存储在可访问的位置(如主应用类属性)
        from nov import parte_pandas
        parte_pandas(df_a, df_b, self.user_inputs)
  1. 修改parte_pandas函数,新增接收用户输入的参数:
# nov.py中的parte_pandas函数
def parte_pandas(df_a, df_b, user_inputs):
    # 结合DataFrame和用户输入执行AI查询逻辑
    for text in user_inputs:
        # 处理单条查询文本的业务代码
        print(f"处理查询指令:{text}")
        # 示例:基于df_a/df_b做数据分析后生成AI回答

方法2:通过全局变量传递输入文本(适合小型项目)

若项目结构简单,可通过全局变量临时存储用户输入:

  1. 在nov.py全局作用域定义变量:
# nov.py全局区域
user_inputs = []
  1. 在Scr3类中更新全局变量:
# Scr3类中的输入处理方法
def save_input(self, instance):
    input_content = instance.text.strip()
    if input_content:
        global user_inputs
        user_inputs.append(input_content)
        instance.text = ""
  1. 修改parte_pandas函数读取全局变量:
def parte_pandas(df_a, df_b):
    global user_inputs
    # 结合df_a、df_b和user_inputs执行查询逻辑

方法3:异步回调时动态获取输入(适配异步处理场景)

若process_efd_icms为异步执行,可在回调parte_pandas前从scr3页面获取输入:

# process_efd_icms处理完成后的回调函数
def on_process_complete(df_a, df_b):
    # 获取scr3页面实例(需确保能访问屏幕管理器)
    scr3 = self.manager.get_screen("scr3")  # 假设scr3的name属性为"scr3"
    user_inputs = scr3.user_inputs
    # 调用parte_pandas
    parte_pandas(df_a, df_b, user_inputs)

关键注意事项

  • 确保df_a和df_b在调用parte_pandas时已完成初始化,且处于可访问范围(如存储为主应用类的属性,而非局部变量)。
  • 多次输入需用列表存储,避免覆盖历史输入内容。
  • 使用KivyMD的ScreenManager时,需通过self.manager.get_screen("scr3")正确获取页面实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:55:06