2014-01-05 72 views
0

這是我t.py如何在Lable中設置文本,來自__init__中初始化的變量?

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 


class Simple(BoxLayout): 
    def __init__(self, **kwargs): 
     super(Simple, self).__init__(**kwargs) 

     # THIS IS SIMLE EXAMPLE, IN PRACTICE I AM READING VALUE FROM TEXT FILE 
     self.sometext = 'Hello from Init.' 

    def set_text(self): 
     return self.sometext # error: 'Simple' object has no attribute 'sometext' 
     #return "Hello World from Simple(BoxLayout)" # this is working 


class TApp(App): 
    def build(self): 
     return Simple() 


TApp().run() 

我t.kv

<Simple>: 
    Label: 
     #text: 'Hello World' # THIS IS WORKING 
     text: root.set_text() 

所以這是行不通的 什麼需要做得到它的工作?

我希望它是更多鈔票...

感謝

+0

你有沒有測試這個簡單的例子,在那裏你直接設置'self.sometext'?問題可能出現在您從文件中檢索值的代碼中。 – jonrsharpe

+0

不明白。你能提供代碼樣本嗎? – WebOrCode

回答

2

下面是從kivy郵件列表我的答辯書副本:

它看起來像KV語言結束調用set_text之前 __init__,這似乎很奇怪,但確實解釋你的問題。

你可以通過各種方式修復它,但我會使用 kivy屬性來完成所有事情,以保持簡單。我在 https://gist.github.com/inclement/8268019做了一個例子。儘管默認值爲 設置爲'',但kv lang可以自動檢測到它屬於 並進行綁定,以便在__init__更改時更新文本 。

鏈接的示例代碼:

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
from kivy.lang import Builder 
from kivy.properties import StringProperty 

Builder.load_string(''' 
<Simple>: 
    Label: 
     #text: 'Hello World' # THIS IS WORKING 
     text: root.sometext 
''') 

class Simple(BoxLayout): 
    sometext = StringProperty('') 

    def __init__(self, **kwargs): 
     super(Simple, self).__init__(**kwargs) 

     self.sometext = 'Hello from Init.' 

class TApp(App): 
    def build(self): 
     return Simple() 


TApp().run()