2014-11-05 2 views
1

크기를 조정할 수있는 Scatter 위젯 두 개를 만들었습니다. 내가 찾고있는 것은 버튼을 누를 때마다 Scatter 위젯 (잠재적으로 최대 20-ish)을 스폰하는 방법입니다. 내가 작성하고 에 addfunction()을 바인딩하려했지만 작동하지 않는 것 같습니다.kivy - 위젯의 추가 인스턴스를 생성하는 바인딩 단추?

나는 메시지가 표시 될 때 (이 공간을 점유 쇼하는 canvas을 가지고 자식 위젯 Drawer과 함께) Scatterer 위젯의 새로운 인스턴스를 생성 할 수있는 방법을 찾고 있어요.

from kivy.app import App 
from kivy.uix.widget import Widget 

from kivy.uix.scatter import Scatter 
from kivy.uix.floatlayout import FloatLayout 
from kivy.uix.button import Button 

class Scatterer(Scatter): 
    pass 
class Drawer(FloatLayout): 
    pass 
class MainWindowWidget(FloatLayout): 
    def addfunction(*args): 
     root = MainWindowWidget() 

     s = Scatterer() 
     d = Drawer() 

     root.add_widget(s) 
     s.add_widget(d) 
     print("button is pressed") 

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

     return MainWindowWidget() 

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

내 .kv 파일 :

가 여기 내 파이썬 코드의

#:kivy 1.0.9 

<MainWindowWidget> 

    Scatterer: 
     id: scatter2 
     size: 80, 80 
     Drawer: 
      size: scatter2.size 
    Scatterer: 
     id: scatter1 
     size: 80, 80 
     Drawer: 
      size: scatter1.size 
    Button: 
     text: 'press' 
     size_hint: None, None 
     size: 100, 100 
     pos: 100, 0 

     on_release: root.addfunction() 
<Scatterer>: 
    do_rotation: False 
    size_hint: None, None 
    size: self.size 

    canvas.after: 
     Color: 
      rgba: 1, 1, 0, 0.5 
     Rectangle: 
      size: self.size 
      pos: self.pos 

<Drawer>: 
    size: self.size 
    canvas: 
     Color: 
      rgba: 0, 1, 0, 0.3 
     Rectangle: 
      pos: self.pos 
      size: self.size 

답변

2

루트 = MainWindowWidget() 당신이 작성하는 것이

귀하의 문제가, 그런 다음 새로운 Scatter를 root에 추가합니다. 그런 다음 root와는 아무 것도하지 마십시오. 표시됩니다.

당신은 새로운 MainWindowWidget에 산란을 추가하지 않으

하지만 방법 새로운 산란을하기 위해 실행중인 현재 하나. 그래서 그러나`d.size`이었다,이 일,

def addfunction(self, *args): 


    s = Scatterer() 
    d = Drawer() 

    self.add_widget(s) 
    s.add_widget(d) 
    print("button is pressed") 
+0

감사와 메소드의 선언을 대체 할'1,1' 때문에 나는's.size = 80, 80'와'd.size을 추가했다 = s.size' 내가 원하는 것을 얻으려면 – ivandaho