我是Kivy初学者,我需要你们的一些建议。 我正在使用ScreenManager在屏幕之间跳转,据我所知,所有屏幕都是在应用程序启动后初始化的,我需要使用之前屏幕中的某些属性进行初始化,例如选择类别或内容。有没有办法做到这一点?
我在CategorySelectScreen中有两个按钮代表某个类别,我希望它们向DictScreen发送一个字符串属性,它将在CategorySelect方法中用作参数,它过滤项目列表,但事实是,应用程序需要在开始时使用该参数,如果没有它,解释器就会抛出错误。
另外,我认为我正在以非常糟糕的方式使用kivy,你能不能查看我的代码并给我一些专业提示?在此先感谢,欢呼:)
答案 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