2014-01-27 36 views
1

我只是我在做什麼錯了,感謝您的擡頭和你的耐心:)多子實例

下面我創建的標籤對象的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

如果您參考代碼解釋了您的問題,那麼這將非常有幫助,如果您還標記了代碼以指明問題部分,那麼這樣做會更好。 – Marcin

+0

道歉Marcin,我會記下下次注意,謝謝) – DeadZero

+0

該死的,我試圖想出一個很好的魔戒玩笑這裏,就像「200個實例是在'while'下創建的,但是一個根統治他們所有人......「但我想不出有吸引力的東西: - /但認真地說,儘量做出一個好頭銜。不止一個'?'可能是你應該編輯它的一個指示器(除非它是一個LaTeX引用問題) –

回答

0

我想你的問題是關於下面的代碼片段:

while i < 200: 
     lb = sticker() 
     self.root.add_widget(lb) 
     i = i + 1 

基本上在這裏,你創建的sticker 200個實例。 對於它們中的每一個,您都使用該變量來存儲對貼紙實例的引用,然後將該實例添加到root

所以基本上,你最終有200個實例作爲widget子件從root實例中引用。但是您並沒有所有的參考資料都很容易訪問,儘管您仍然可以通過您的root小部件訪問它們。

我應該爲每個實例創建不同的變量名嗎?

嗯,我不認爲你想在你的代碼;-)

200變量名(如果有的話如何做到這一點動態),並將它們分配給一個列表?然後添加它們?

但更嚴重的是,你可以將它們添加到列表中。這完全取決於這些小部件的用途,以及您是否需要方便地訪問這些參考。

例如爲:

sticker_list = [] 
for i in range(0,200): 
    s = sticker() 
    sticker_list.append(s) 
    self.root.add_widget(s) 

但正如我說這取決於你希望你的代碼做什麼,這可能是有用或無用。通常,如果要處理用戶交互,最好使用回調事件處理它們,閱讀更多kivy示例以瞭解更多信息。

+0

感謝zmo,是的,他們都被添加到根,所以他們是可見的,我將如何調整他們,所以他們很容易引用和訪問?當我只碰到1/200時,只有那個變化?,我仍然在學習一些帖子和從這裏給出的一些帖子的鏈接...這並不容易:/大聲笑 – DeadZero

+0

是的,只有這一個變化。我想你需要了解一個變量,一個參考和一個實例之間的區別。你的記憶中有200個實例,變量是給定時刻的一個實例的引用。如果你真的需要它,你可以通過在循環前聲明'sticker_list = []'並用'sticker_list.append(sticker())'替換'lb = sticker()'來保存列表中的所有引用。' – zmo

+0

感謝zmo,我會在嘗試修復它之前將它們添加到我的閱讀列表中,這對於現場和行話來說是新的,所以謝謝你的支持。 – DeadZero