2016-10-14 8 views
0

画面にダイナミックにボタンを追加しようとしています。私は、アプリケーションを実行すると、次のエラーがあります。問題を解決するのを手伝ってください。ここでScreenManagerのスクリーンにボタンを動的に追加する際のエラーKivy

Traceback (most recent call last): File "main.py", line 174, in screenManager.add_widget(HomeScreen(name = 'homeScreen')) File "main.py", line 162, in init self.add_widget(btn) File "/Applications/Kivy.app/Contents/Resources/kivy/kivy/uix/floatlayout.py", line 111, in add_widget pos=self._trigger_layout, AttributeError: 'HomeScreen' object has no attribute '_trigger_layout'

私main.py

class HomeScreen(Screen): 

    def __init__(self, **kwargs): 
     for i in range(80): 
      btn = Button(text=str(i), size=(90, 90), size_hint=(None, None)) 
      self.add_widget(btn) 


# Screen Manager 
screenManager = ScreenManager(transition = FadeTransition()) 

# Add all screens to screen manager 
#screenManager.add_widget(UsernameScreen(name = 'usernameScreen')) 
#screenManager.add_widget(PasswordScreen(name = 'passwordScreen')) 
#screenManager.add_widget(LevelTwoScreen(name = 'levelTwoScreen')) 
#screenManager.add_widget(LevelTwoScreen(name = 'levelThreeScreen')) 

screenManager.add_widget(HomeScreen(name = 'homeScreen')) 

class ThreeLevelAuthApp(App): 
    def build(self): 
     return screenManager 

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

kivyファイル

<HomeScreen>: 
    ScrollView: 
     size_hint: None, None 
     size: 400, 400 
     pos_hint: { 'center_x': 0.5,'center_y': 0.5 } 
     do_scroll_x: False 

    GridLayout: 
     cols: 6 
     padding: 20 
     spacing: 20 
     size_hint: None, None 
     width: 400 

答えて

0

__init__で始まるのをしてみましょうです:

class HomeScreen(Screen): 

    def __init__(self, **kwargs): 
     for i in range(80): 
      btn = Button(text=str(i), size=(90, 90), size_hint=(None, None)) 
      self.add_widget(btn) 

これは正常に見えるとしたときに呼び出されたがインスタンスを作る基本的な欠点が1つあります - super()。最初にScreenを初期化するためにはsuper()が必要です。実際の動作を持つクラスにするために必要なすべての変数とメソッドが含まれているため、実際にはを継承します。

Screen自体はRelativeLayoutであり、あなたのためのレイアウトを使用しない場合は、配置やサイジングなどの追加事項を処理する必要があります。

import random 
class HomeScreen(Screen): 

    def __init__(self, **kwargs): 
     super(HomeScreen, self).__init__(**kwargs) 
     for i in range(80): 
      btn = Button(text=str(i), size=(90, 90), 
         size_hint=(None, None), 
         pos=[random.randint(0,500), random.randint(0,500)]) 
      self.add_widget(btn) 
+0

ああ私は愚かな間違いを犯しました。とにかく、ありがとう。今はうまくいく。 –

関連する問題