【问题标题】:How to share variables between two screen classes in kivy如何在kivy中的两个屏幕类之间共享变量
【发布时间】:2021-03-27 23:12:11
【问题描述】:

在开始之前,我想说我已经尝试了所有我能找到的方法,包括这个:passing variables between two screen classes in kivy

我的情况看起来像这样:

class SettingsWindow(Screen):
    important_setting = StringProperty()

    def foo():
       pass

class GameWindow(Screen):
    woo = StringProperty()
    variable = # Want to get the "important setting var here"

    def bar():
      pass

我还应该指出,我使用的是 .kv 文件

【问题讨论】:

  • 您需要在此处准确解释为什么您的链接问题的解决方案不足。您的“共享”一词未定义。从最完整的意义上说,你不能在不同的类之间共享一个变量;当您分离课程时,您放弃了该概念(共同属性)。简单地按需传递所需的值是典型的方法。
  • 您可以从孩子访问父变量,但不能相反。

标签: python kivy kivy-language


【解决方案1】:

你可以这样做:

class SettingsWindow(Screen):

    important_setting = StringProperty()


class GameWindow(Screen):

    variable = StringProperty()

    def on_pre_enter():
        self.variable = self.parent.ids['settings_window'].important_setting

这会将 GameWindow.variable 设置为 GameWindow 成为当前窗口时的任何 SettingsWindow.important_setting。

当然,你必须给 SettingsWindow 一个 'settings_window' 的 id 才能工作。在您的 kv 文件中执行此操作。大概它看起来像这样(虽然因为你没有分享你的 kv 文件,我不太确定):

ScreenManager:

    SettingsWindow:
        id: settings_window  # <--- this is what you have to add to you kv file
        name: 'settings_window' 

    GameWindow:
        id: game_window
        name: 'game_window' 

【讨论】:

  • 请注意,GameWindow.variable 不会在每次 SettingsWindow.important_variable 更改时动态更改。它的值仅在屏幕变化时被复制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多