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

自定义类调用MyTextField.text获取MDTextField文本返回<AliasProperty name=text>问题

问题原因及解决方案

核心问题

你得到<AliasProperty name=text>是因为直接访问了类的属性而非实例属性,同时代码里的自定义类继承存在错误。

代码中的关键错误

  1. 自定义类继承逻辑错误:Class MyTextField(MyTextField): 是继承自身,会引发逻辑混乱,正确应该继承MDTextField。
  2. 访问类属性而非实例:MyTextField.text是访问MyTextField这个类的属性,而非界面中实际创建的输入框实例的文本内容,所以返回的是KivyMD中text属性的别名对象,不是用户输入的实际文本。

修正方案

步骤1:修正自定义文本框类

from kivymd.uix.textfield import MDTextField

class MyTextField(MDTextField):
    pass

步骤2:获取输入框实例的文本

你需要获取界面中MyTextField的具体实例,而非直接用类名访问。常见实现方式有两种:

方式一:通过ID获取实例(适用于KV文件中给输入框设置了id的场景)

假设KV文件中给MyTextField设置了id为my_textfield,可以这样获取文本:

def create_playlist(self, txt):
    app = MDApp.get_running_app()
    # 获取输入框实例
    text_field = app.root.ids.my_textfield
    input_text = text_field.text

    if input_text:
        self.venus.append(input_text)
    
    # 简化列表推导式
    data = [{"text": item, "size_hint_x": 1} for item in self.venus]
    app.root.ids.rp.data = data

方式二:通过方法参数传递文本

你的create_playlist方法有txt参数但未使用,可以直接用该参数传递输入框的文本(比如在KV文件中绑定按钮点击事件时传入):

def create_playlist(self, txt):
    app = MDApp.get_running_app()

    if txt:
        self.venus.append(txt)
    
    data = [{"text": item, "size_hint_x": 1} for item in self.venus]
    app.root.ids.rp.data = data

额外优化点

  • 空字符串判断直接用if input_text:即可,比if input_text == "":更简洁。
  • 列表推导式无需通过索引遍历,直接遍历self.venus元素即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 07:24:19