2017-02-27 136 views
0

如何將MainPage中的imagebuttons添加到SPage?當按下時將按鈕添加到另一個屏幕... kivy

例如:

class MainPage(Screen): 
    def openmain(self, *args): 
     self.stop = ImageButton(source= 'stop.png', allow_stretch= True, pos= (390, 300), size_hint= (.2,.1)) 
     self.stop.bind(on_release=self.addstop) 
     self.add_widget(self.stop) 
     #btn2 
     #btn3 
     #btn4 

class SPage(Screen): 
    def buttonsbox(self, *args): 
     for x in xrange(4): ####how do I use choice(random) 
      self.btnsbox = BoxLayout(orientation= 'vertical') 
      self.add_widget(self.btnsbox) 

我試着按下按鈕S頁面,按照一個隨機添加到「btnsbox」 ......會像一個開關的工作?任何類型的輸入都會有所幫助,我願意學習。謝謝!

回答

1

我會將新按鈕添加到列表中,並使用隨機的隨機播放來拖曳它們。然後清除第二個屏幕上的boxlayout,並循環列表,將它們附加到boxlayout。
試試這個例子:

from kivy.app import App 
from kivy.uix.screenmanager import ScreenManager 
from kivy.lang import Builder 
from kivy.properties import ListProperty, ObjectProperty 
from random import shuffle 



Builder.load_string(''' 

#: import Button kivy.uix.button.Button 

<MyScreenManager>: 
    box2: box2 
    Screen: 
     name: "screen1" 
     BoxLayout: 
      orientation: "vertical" 
      Button: 
       text: "Button 1" 
       on_release: 
        root.added_buttons.append(Button(text="Button 1")) 
      Button: 
       text: "Button 2" 
       on_release: 
        root.added_buttons.append(Button(text="Button 2")) 
      Button: 
       text: "Button 3" 
       on_release: 
        root.added_buttons.append(Button(text="Button 3")) 
      Button: 
       text: "Goto screen 2" 
       on_release: root.current = "screen2" 

    Screen: 
     name: "screen2" 
     on_enter: root.update_buttons() 
     BoxLayout: 
      orientation: "vertical" 
      BoxLayout: 
       orientation: "vertical" 
       id: box2 
      Button: 
       text: "Goto screen 1" 
       on_release: 
        root.current = "screen1" 

''') 



class MyScreenManager(ScreenManager): 

    box2 = ObjectProperty(None) 
    added_buttons = ListProperty([]) 


    def update_buttons(self,*args): 

     self.box2.clear_widgets() 
     shuffle(self.added_buttons) 
     for i in self.added_buttons: 
      self.box2.add_widget(i) 
     self.added_buttons[:] = [] 



class MyApp(App): 

    def build(self): 

     return MyScreenManager() 



MyApp().run() 
+0

這太棒了!謝謝,我結束了使用stacklayout,並添加了一個clear_widgets按鈕。真的很感謝你!並可以幫助我爲什麼[this](http://stackoverflow.com/questions/42474953/kivy-sound-volume-python)不起作用。 –

相關問題