Kivy:将数据传递给另一个类

时间:2017-03-21 19:23:48

标签: python python-3.x class popup kivy

我试图用Kivy(1.9)创建一个简单的GUI,使用弹出窗口从列表中更改一些选项并将其保存到数据库中。当我调用popup()时,Python(3.4.5)崩溃..

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()

1 个答案:

答案 0 :(得分:1)

以下是一些事情。

首先,如果您要打算__init__,请记得致电super 但在这个简单的例子中,你不需要__init__

然后,on_click上没有Button个事件。使用on_presson_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()