2016-05-08 9 views
0

PythonとKivyを使用して単純なラベルを画面に追加しようとしています。私はBuilder.load_string()メソッドを使用してそれを行う方法を知っていますが、私はPythonを通してKivyライブラリを使用してそれをやりたいと思います。Python Kivy、Pythonで画面にラベルを追加できません

次のコードを実行すると、空の紫色の画面が表示されますが、ラベルをBuilder.load_string()メソッドに挿入すると正常に動作します。私は間違って何をしていますか?

from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.floatlayout import FloatLayout 
from kivy.uix.label import Label 
from kivy.uix.screenmanager import ScreenManager, Screen 

Builder.load_string(""" 
<HomePage>: 
    FloatLayout: 
     canvas.before: 
      Color: 
       rgb: .5,0,.75 
      Rectangle: 
       size: self.size 
""") 


class HomePage(Screen): 
    layout = FloatLayout() 
    home_title = Label(text="text") 
    layout.add_widget(home_title) 


class LabelApp(App): 
    def build(self): 
     sm = ScreenManager() 
     sm.add_widget(HomePage(name='home')) 
     return sm 

if __name__ == "__main__": 
    LabelApp().run() 

答えて

0

それはあなたが何をしたいかによって異なります。あなたは常にHomePageにこれらのウィジェットを追加したい場合は、HomePage__init__方法でこれを行う必要があります(そこself.add_widget(layout)を追加することを忘れないでください

また、単にただ、変数にHomePageを割り当て、再びその上add_widgetを使用しています。LabelAppbuild方法でそれらを追加することができます。

+0

[OK]を、今私はちょうどDEFを使用してみました。私は何かが働いていた理由を理解する必要があります__その中に__( AttributeError: 'HomePage'オブジェクトに '_trigger_layout'属性がありません 次に余分な行を追加しましたが、なぜ問題が修正されたのか分かりません。私は以下に示すスーパーラインを追加し、それを下のScreen.initラインに置き換えようとしました。両方とも働いた、なぜか? スーパー(ホームページ、自己).__ init __(** kwargs) Screen .__ init __(self) – jdanaher

+0

@jdanaherは、「super」を呼び出してください。例[kivyの基本ガイド](https://kivy.org/docs/guide/basic.html#customize-the-application)を参照してください。 – zeeMonkeez

+0

ありがとう、それはかなり参考にされた読書でした! Screenクラスをオーバーロードする各画面でsuperを呼び出すことはできますか? – jdanaher

関連する問題