2016-02-12 191 views
0

2個部件的種類。我覺得有點傻,因爲我知道我錯過了一些簡單的事情,但我一直在尋找,並且找不到任何東西。動態添加按鈕Kivy

第一:

我需要能夠按鈕添加到屏幕屏幕經理。我可以在.kv文件中完成,但無法在.py文件中工作,所以我知道我做錯了什麼。

第二:我需要將它添加到.py文件中(據我至少讀過),因爲我需要添加不同數量的按鈕,具體取決於列表中有多少項。所以我有這個測試代碼,它真的是我主代碼的一部分。

的.py:

from kivy.app import App 
from kivy.uix.button import Button 
from kivy.uix.floatlayout import FloatLayout 
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition 

class Test(ScreenManager): 
    pass 

class StartMenu(Screen): 
    pass 

class LoadMenu(Screen): 
    lay = FloatLayout() 
    lay.add_widget(Button(text = 'Hi')) 


class TestApp(App): 
    def build(self): 
     return Test() 

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

和.kv文件:

<Test>:  

    StartMenu: 
     name: 'start_menu' 

     FloatLayout: 

      Button: 

       size_hint: (.5, .10) 
       pos_hint: {'center_x': .5, 'center_y' : .90} 
       text: 'Play' 
       color: [1, 0, 0, 1] 

       font_size: self.height * 5/6 
       border: [25, 25, 25, 25] 
       on_press: root.current = 'load_menu' 

    LoadMenu: 
     name: 'load_menu' 

,這樣只是給了我一個按鈕屏幕,當我點擊它把我送到一個黑色的屏幕。正如我所說我可以得到加載菜單來顯示按鈕,但這只是使用.kv文件。 至於動態添加按鈕將一個for循環工作?

L=['save 1', 'save 2', 'save 3'] 
for x in L: 
    add_widget(Button(title = L[x])) 

回答

1

This works。我通過更改按鈕的位置進行檢查。

LoadMenu(Screen): 
    def __init__(self, **kwargs): 
     super(LoadMenu, self).__init__(**kwargs) 
     Clock.schedule_once(self.update) 

    def update(self, dt): 
     L = [x for x in range(len(os.listdir('saves')))] 
     for x in L: 
      x = self.add_widget(Button(text = os.listdir('saves')[x]))