当前位置: 首页 > 面试题库 >

Kivy-屏幕管理器-访问其他类中的属性

舒永嘉
2023-03-14
问题内容

使用Kivy屏幕管理器,我创建了两个屏幕。在屏幕1中时,我想在屏幕2中更改标签。我在代码中突出显示了有问题的区域:

我的 test.ky:

#: import ScreenManager kivy.uix.screenmanager.ScreenManager
#: import Screen kivy.uix.screenmanager.ScreenManager
#: import SettingsScreen screen


ScreenManager:
    MenuScreen:
    SettingsScreen:


<MenuScreen>:
    name: 'MenuScreen'
    BoxLayout:
        Button:
            text: 'Goto nn'
            on_press: 
                root.manager.current = 'SettingsScreen'
                root.change_text()


<SettingsScreen>:
    name: 'SettingsScreen'
    label_id: label_field
    BoxLayout:
        Label:
            id: label_field
            text: "to_be_changed"

和我的 screen.py

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import ScreenManager, Screen


class MenuScreen(Screen):
    def change_text(self):
        pass
        # HERE: something like
        # root.SettingsScreen.label_field.text = 'new text'


class SettingsScreen(Screen):
    pass


class TestApp(App):
    pass

TestApp().run()

任何帮助是极大的赞赏!谢谢,尼科


问题答案:

这个怎么样:

当您按下MenuScreen上的按钮时,它会在其自身上设置一个属性,该属性包含要放入SettingsScreen标签中的文本。然后,在kv文件中为MenuScreen分配了一个ID值,该ID值用于引用此属性。例:

main.py

class MenuScreen(Screen):
    text = StringProperty('')
    def change_text(self):
        self.text = "The text you want to set"
        self.manager.current = "SettingsScreen"

class SettingsScreen(Screen):
    label_text = StringProperty('')

KV文件

ScreenManager:
    id: screen_manager
    MenuScreen:
        id: menu_screen
        name: 'MenuScreen'
        manager: screen_manager
    SettingsScreen:
        name: 'SettingsScreen'
        manager: screen_manager
        label_text: menu_screen.text

<MenuScreen>:
    BoxLayout:
        Button:
            text: 'Goto nn'
            on_press:
                root.change_text()

<SettingsScreen>:
    BoxLayout:
        Label:
            text: root.label_text

如您所见,我在kv文件中的ScreenManager本身下设置了屏幕的名称和ID,因为这通常是我要做的工作。



 类似资料:
  • 问题内容: 假设我正在构建一个井字游戏(因为它与结构非常相似),我希望结果在弹出窗口中显示,并带有一个新的游戏按钮,并且希望此弹出窗口允许我访问设置(另一个按钮)并对其进行更改,使其始终位于弹出窗口中,然后离开并最终将其关闭并开始新游戏。 我希望我可以保持秩序,因此有一个单独的弹出窗口类,可以在其中构建自定义弹出窗口。 显而易见,我将newgame方法和reset方法作为我的游戏网格类的方法。另一

  • 问题内容: 我最近拾起Java并遇到了问题。我有几个具有不同类的文件,但是我无法弄清楚如何访问文件中声明了其他类之外的其他类的对象。例如: 我不确定如何从其他文件和类本身有效访问其他类的这些对象?我知道我可以使对象静态化,然后通过它们所在的类将它们作为变量进行访问,但这似乎有点违反直觉?我来自面向对象较少的编程背景,因此我仍在尝试了解Java的编程风格。 问题答案: 您可能只想要这样的东西: 希望

  • 问题内容: 我的班级有一个名为DataStorage的哈希图: 如何在另一个类中访问此HashMap中的数据? 问题答案: 将HashMap创建为实例变量,并提供一种将其访问类API的方法:

  • 我正在用libgdx制作一个游戏,但我是新手,我不知道我的代码是正确的形式还是最好的方式。 我试图为游戏打下基础: 实现菜单的屏幕管理器, 选项屏幕 加载屏幕 游戏屏幕 停顿的尖叫声 屏幕上的游戏 在加载屏幕中,我喜欢做一些类似龙珠的事情,当加载屏幕允许我们让悟空吃米饭时,暂停屏幕需要绘制一些统计数据和选项,比如《超级英雄》或《恶魔城》,当玩家触摸按钮时,菜单会做一些事情像移动相机或打开一扇门,或

  • 问题内容: 我正在使用以下代码将字符串解析为DOM: 哪里是这样的。 给我。如果我做类似的事情,我会得到一个DOM对象。但是,如果像往常一样尝试访问任何属性,它将为我提供: 其他属性也是如此,例如。另一方面,属性检索很好。 是否有魔术功能可以访问这些属性? 问题答案: 您的当前方法失败,因为未为给定XML文档定义HTML属性。如果提供MIME类型,则该方法应该起作用。 下面的代码为尚不支持它的浏览

  • 由于某种原因,我有一个LinkedList类无法访问我的学生类方法。我不明白为什么会发生这种情况,因为我的linkedlist类是Student类型。我一直收到一个错误:找不到symbol symbol:method getName()位置:Student类型的变量数据,其中Student是一个类型变量:Student extends对象在类节点中声明。下面的方法来自我的链表类 getGpa是我的

  • 问题内容: 我已经安装了带有mysql的docker容器,该容器公开了3306。我已经指定了数据库用户,数据库密码并创建了一个测试数据库,并将特权授予了新用户。 在另一个容器中,我想访问此数据库。 因此,我用一个简单的PHP脚本设置了新容器,该脚本在此db中创建了新表。 我知道mysql容器的ip是172.17.0.2这样: 比起使用mysqli,我创建了新表,并且一切正常。 但是我认为使用他的I

  • 我正在尝试将我用Python制作的游戏移植到Java。在Python版本中,我将所有的方法和变量都放在一个“类”中,玩家是这样的字典: 游戏派克 然后分别添加玩家的数据值: 在Java版本中,我有一个单独的类用于定义玩家对象,以及游戏的主方法。 例如(这是一个小版本): 游戏java(省略返回) 游戏者java(省略返回) 假设,当要编译的两个类一起编译时,程序将能够运行,因为主变量是公共变量,并