2017-03-21 1 views
0

Kivy (1.9)를 사용하여 간단한 GUI를 만들고 팝업에서 일부 옵션을 변경하여 db에 저장하려고합니다. 내가 (3.4.5) 충돌 ..Kivy : 다른 클래스에 데이터 전달

main.py 팝업(), 파이썬를 호출 할 때 : 여기

from kivy.app import App 
from kivy.uix.button import Button 
from kivy.uix.popup import Popup 
from kivy.properties import ListProperty 
from kivy.lang import Builder 

Builder.load_string(''' 
<PopView>: 
    title: 'Popup' 
    size_hint: (.8, .8) 
    Button: 
     text: 'Save' 
''') 

class MainApp(App): 

    def build(self): 
     b = Button(text='click to open popup') 
     b.bind(on_click=self.view_popup()) 
     return b 

    def view_popup(self): 
     a=PopView() 
     a.data=[1,2,3,4] #e.g. 
     a.open() 

class PopView(Popup): 

    def __init__(self): 
     self.data = ListProperty() 

    def save_data(self): 
     #db.query(self.data) 
     pass 


if __name__ in ('__main__', '__android__'): 
    MainApp().run() 

답변

0

이 몇 가지 있습니다. 당신이 overite 위하여려고하는 경우에

첫째, __init__super
전화를 기억하지만 그나마이 간단한 경우 __init__

그런 다음, Button에는 on_click 이벤트가 없습니다 필요합니다. on_press 또는 on_release

마지막으로 중요한 사항은 다음과 같습니다. bind 함수에서 메소드를 호출 할 필요가 없습니다. 패스 만 (() 제외)

이제 예제가 이렇게 보입니다.

from kivy.app import App 
from kivy.uix.button import Button 
from kivy.uix.popup import Popup 
from kivy.properties import ListProperty 
from kivy.lang import Builder 

Builder.load_string(''' 
<PopView>: 
    title: 'Popup' 
    size_hint: (.8, .8) 
    Button: 
     text: 'Save' 
''') 

class MainApp(App): 

    def build(self): 
     b = Button(text='click to open popup') 
     b.bind(on_release=self.view_popup) 
     return b 

    def view_popup(self,*args): 
     a = PopView() 
     a.data=[1,2,3,4] #e.g. 
     a.open() 

class PopView(Popup): 
    data = ListProperty() 

    def save_data(self): 
     #db.query(self.data) 
     pass 


if __name__ in ('__main__', '__android__'): 
    MainApp().run() 
+0

지금은 작동하지만 im newbie와 나는 왜 당신이 view_popup() 함수에서 * args를 사용하는지 이해하지 못합니다. 내가 __init __() 밖에서 데이터를 선언한다면, 나는 다른 popview 객체에 문제가있을 것인가? 고마워요! –

+0

@JavierStacul * args는 각 인수를 지정할 필요없이 여러 개의 인수를 전달하도록합니다. 이 경우에는 Button 만 전달되므로'def view_pop (self, button)'도 할 수 있습니다. 'print (args)'를 시도해 볼 수 있습니다. '** kwargs'를하면 key = val 인수를 전달할 수 있습니다. 이'def test (** kwargs) : print (kwargs)'를 시도한 다음 test (a = 1, b = 2) .. __init__ 또는 외부에'data'를 정의하더라도 각각의 목적. 그러나 새로운 팝업을 만들 때마다이 경우와 마찬가지로 매번 새로운 데이터를 만듭니다. – EL3PHANTEN

관련 문제