使用 ScreenManager 在按钮释放时以 kv 初始化屏幕

Init screen in kv on button release using ScreenManager

我是一名初学者 Kivy 开发人员,我需要你们的一些建议。 我正在使用 ScreenManager 在屏幕之间跳转,据我所知,所有屏幕都是在应用程序启动后初始化的,我需要使用之前屏幕的某些属性对它们进行初始化,例如选择类别或内容。有什么办法吗?

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

此外,我认为我使用 kivy 的方式非常糟糕,请您查看我的代码并给我一些专业提示好吗?提前致谢,干杯:)

kv 文件:http://pastebin.com/UdvGS7Wv

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

在声明您的屏幕时,请决定输入的对象是什么。然后使这个对象成为属性。之后,设置 on_... 回调,您可以在其中使用具有基于此输入对象的值的小部件构建屏幕。例如:

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