如何访问数组中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
相关产品推荐
相关产品推荐

