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

如何访问数组中StringProperty的属性值?

问题分析

你碰到的核心问题是:Kivy的StringProperty是描述器对象,并非直接存储值的变量。当你通过self.var1访问时,描述器会自动返回背后的实际字符串值;但把var1(Property对象本身)存入数组后,直接访问数组元素拿到的就是这个对象,而非它绑定的属性值。

解决方案

下面提供两种适配你CSV写入需求的可行方案:

方式一:数组存储属性名字符串

把属性名(字符串)存入数组,循环时通过getattr()获取对应的值:

var1 = StringProperty("something1")
var2 = StringProperty("something2")
var3 = StringProperty("something3")

# 存储属性名字符串
arr = ["var1", "var2", "var3"]

def send2(self):
    print(getattr(self, self.arr[0]))  # 输出 something1

def save_to_csv(self):
    # 假设writer是已初始化的csv.writer对象
    for prop_name in self.arr:
        value = getattr(self, prop_name)
        writer.writerow([value])  # writerow需要可迭代对象,用列表包装单个值

方式二:利用Property对象的name属性

如果坚持要在数组中存储Property对象,可以通过它的name属性拿到对应的属性名,再用getattr()取值:

var1 = StringProperty("something1")
var2 = StringProperty("something2")
var3 = StringProperty("something3")

# 存储Property对象
arr = [var1, var2, var3]

def send2(self):
    prop = self.arr[0]
    print(getattr(self, prop.name))  # 输出 something1

def save_to_csv(self):
    for prop in self.arr:
        value = getattr(self, prop.name)
        writer.writerow([value])
补充说明

Kivy的Property系统是为实现UI响应式更新设计的,Property对象负责监听值变化并通知UI刷新。直接访问Property对象本身只会得到这个管理对象,必须通过实例(self)访问才能拿到实际值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 05:12:04