我正是我做错了,谢谢你的任何提醒和耐心:)
下面我在演示类中创建100个贴纸对象实例(来自类贴纸),并将它们作为子项添加到根小部件,但只使用1个变量名,这是正确的做事方式,因为在触发贴纸类的触摸方法的当前时刻,所有实例都会改变值,而不仅仅是碰巧碰到的实例。
# root widget creation
class rootwidget(FloatLayout):
def __init__(self, **kwargs):
super(rootwidget, self).__init__(**kwargs)
# sticker object, WIP , labeltype,pos,size place holders
class sticker(Label):
def __init__(self,**kwargs):
self.labeltype = [1,2,3,4,5,6,7,8,9]
self.xf = 0
self.yf = 0
super(sticker,self).__init__(**kwargs)
self.text = str(self.labeltype[random.randint(0,len(self.labeltype)-1)])
self.pos_hint = self.generateposhint()
self.size_hint = size_hint=(0.01,0.01)
# place holder for testing touch down, method to be more relevant once basics are nailed.
def on_touch_down(self,instance):
self.text = "T"
#main app
class demo(App):
def build(self):
self.root = root = rootwidget()
return self.root
#place holder loop. while testing ,to be moved into method
while i < 200:
lb = sticker()
self.root.add_widget(lb)
i = i + 1
if __name__=='__main__':
demo().run()
答案 0 :(得分:0)
我想您的问题是关于以下代码段:
while i < 200:
lb = sticker()
self.root.add_widget(lb)
i = i + 1
基本上你在这里创建了200个sticker
个实例。
对于它们中的每一个,您使用变量存储对贴纸实例的引用,然后将该实例添加到root
。
所以基本上,你最终有200个贴纸实例从root
实例作为widget子元素引用。但是您没有易于访问的所有引用,但您仍然可以通过root
小部件访问它们。
我应该为每个实例创建不同的变量名吗?
好吧,我认为您不希望代码中包含200个变量名; - )
(如果是这样,它是如何动态地)并将它们分配给列表?然后添加它们?
但更严重的是,是的,可以将它们添加到列表中。这一切都取决于这些小部件的用途,以及您是否需要方便地访问这些小部件。
e.g:
sticker_list = []
for i in range(0,200):
s = sticker()
sticker_list.append(s)
self.root.add_widget(s)
但正如我所说,这可能有用或无用,具体取决于您希望代码执行的操作。通常,如果您想要处理用户交互,最好使用回调事件来处理它们,阅读更多kivy示例以了解更多信息。