使用ScreenManager

时间:2016-05-11 13:48:10

标签: python button screen kivy

我是Kivy初学者,我需要你们的一些建议。 我正在使用ScreenManager在屏幕之间跳转,据我所知,所有屏幕都是在应用程序启动后初始化的,我需要使用之前屏幕中的某些属性进行初始化,例如选择类别或内容。有没有办法做到这一点?

我在CategorySelectScreen中有两个按钮代表某个类别,我希望它们向DictScreen发送一个字符串属性,它将在CategorySelect方法中用作参数,它过滤项目列表,但事实是,应用程序需要在开始时使用该参数,如果没有它,解释器就会抛出错误。

另外,我认为我正在以非常糟糕的方式使用kivy,你能不能查看我的代码并给我一些专业提示?在此先感谢,欢呼:)

kv档案:http://pastebin.com/UdvGS7Wv

py文件:http://pastebin.com/gJn9Mrip

1 个答案:

答案 0 :(得分:1)

当声明你的屏幕时,决定它的输入是什么对象。然后将此对象设为属性。之后,在_...回调上设置您使用基于此输入对象的值的小部件构建屏幕。例如:

class DictScreen(Screen):
   category_selected = ObjectProperty(None)

   def on_category_selected(self, instance, value):
      category_selected = value
      self.clear_widgets()
      self.add_widget(Button(text=category_selected.name))

在之前的屏幕中,在切换到DictScreen之前从app.root.ids获取其实例,然后为其分配category_selected,然后使用ScreenManager设置新的当前屏幕。通过这种方式,您可以在切换到DictScreen之前立即使用选择的类别进行构建。

切换到DictScreen之前获取其实例”如何做到这一点?这里有很好的解释: https://kivy.org/docs/api-kivy.uix.widget.html?highlight=widget#kivy.uix.widget.Widget.ids