簡體   English   中英

在ScreenManager Kivy中將按鈕動態添加到屏幕時出錯

[英]Error while Adding buttons dynamically to Screen in ScreenManager Kivy

我正在嘗試將按鈕動態添加到屏幕。 運行應用程序時出現以下錯誤。 請幫助我解決問題。

回溯(最近通話最后一個):文件“main.py”,線路174,在screenManager.add_widget(主屏幕(NAME = '主屏幕'))文件“main.py”,線路162,在初始化 self.add_widget(BTN) add_widget pos = self._trigger_layout,AttributeError中的文件“ /Applications/Kivy.app/Contents/Resources/kivy/kivy/uix/floatlayout.py”,第111行,AttributeError:“ HomeScreen”對象沒有屬性“ _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()

獼猴桃文件

<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

讓我們從__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)

盡管這看起來不錯,並且在創建實例時被調用,但還有一個基本的東西-super super() 您需要super()首先初始化Screen ,以便它具有使它成為具有真實行為的類的所有必需的變量和方法,從而使您能夠實際繼承行為。

請注意, 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM