在for循环kivy之后更新ListProperty变量

时间:2018-01-29 21:02:08

标签: python python-3.x kivy kivy-language

我使用for循环来循环一年中的几个月,然后将它们附加到列表而不是每个月手动输入。

变量self.mylist完全更新mylist 运行for i in range(1,13):时,它会更快地更新self.mylist 但由于self.mylist未被再次调用,因此在for循环后不会更新mylist。或者我认为是我的问题。

我认为这种方法是必要的,因为ListProperty不能被追加到但可以分配给?
所以我的问题是在运行for循环后如何使用mylist再次更新self.mylist

kv文件仅包含问题的相关部分。其功能如预期,从列表中获取值并使用text:

显示

.py文件

class Telldate(AnchorLayout):
   todayday= ObjectProperty('')
   mylist=ListProperty(['','','','','','',''])

   print(mylist)

   def __init__(self,*args, **kwargs):
      super().__init__(*args, **kwargs)
      self.todayday=strftime('%A')
      self.mylist= ['this', 'does','work', 'but']
      print(self.mylist)
      for i in range(1,13):
         self.mylist.append(calendar.month_name[i])
      print(self.mylist)

class PlannerApp(App):
 #  def updater(self):
      #      Clock.schedule_interval(self.monthcyclewithglobal, 0.5)      

   def build(self):
         return Telldate()


if __name__ == '__main__':
    PlannerApp().run()

.kv文件

<Telldate>:
    ---------
    -----
    --
    text:root.mylist[3]

我尝试过但似乎无法工作的事情 所以我可以定义另一个函数并使用return语句。

   def monthcycle(self):
      self.mylist= ['this', 'does','work', 'but']
      print(self.mylist)
      for i in range(1,13):
         self.mylist.append(calendar.month_name[i])
      print(self.mylist)
      return self.mylist

或者我可以使用似乎不鼓励的全局变量

   def monthcyclewithglobal():
      global mylist
      mylist= ['this', 'does','work', 'but']
      print(mylist)
      for i in range(1,13):
        mylist.append(calendar.month_name[i])
      print(mylist)
   monthcyclewithglobal() #I am aware this bit is probably terrible code

硬编码工作正常的月份。但我想自动化 像这样

self.mylist= [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', \
                     'August', 'September', 'October', 'November', 'December']

kivy V1.10.0 python V3.6.2使用IDLE V3.6.2 谢谢你的耐心!

EDIT1: 为澄清这一点不起作用。

   mylist=ListProperty(['','','','','','',''])
   for i in range(1,13):
     mylist.append(calendar.month_name[i])

作为

AttributeError: 'kivy.properties.ListProperty' object has no attribute 'append'

1 个答案:

答案 0 :(得分:0)

所以我用List comprehensions解决了这个问题 我不想在变量之外使用循环,而是希望通过缩小列表理解来减少代码的长度并使我的变量更新成为非问题。
I realised this while reading the docs.

class Telldate(AnchorLayout):
   mylist=ListProperty(['','','','','','','','','','','','',''])

   print(mylist)

   def __init__(self,*args, **kwargs):
      super().__init__(*args, **kwargs)
      self.mylist= [calendar.month_name[i][0:3] for i in range(1,13)]  

希望有一天能帮到某人!