设置全局变量Kivy

2024-09-27 21:31:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用屏幕管理器来管理几个不同的屏幕。一个屏幕有两个按钮,两个按钮都指向另一个屏幕,但根据按下的按钮的不同,我希望在第二个屏幕上显示不同的文本。这是我的代码:

.py

MY_GLOBAL = "test"

class ChooseProgScreen(Screen):
    global MY_GLOBAL
    def setTitle(self, newTitle):
        MY_GLOBAL = newTitle
        print(MY_GLOBAL)

class SwitchScreen(Screen):
    global MY_GLOBAL
    def getTitle(self):
        return MY_GLOBAL

class ScreenManagement(ScreenManager):
    pass

class MainApp(App):
    def build(self):
        presentation = Builder.load_file("kivy.kv")
        return presentation

千伏

^{pr2}$

在.kv中的ChooseProgScreen中,当释放按钮时,我从.py文件调用一个方法,该方法将全局变量设置为新屏幕并打印它。当您按下其中一个按钮时,打印部分工作正常,全局变量作为新字符串打印,但SwitchScreen标签仍然显示

"test"

而不是

"test1" or "test2"

我认为全局变量可能是一种很糟糕的方法,但是我不知道如何使用屏幕管理器和kivy语言来实现这一点。如果有人能帮助正确地使用全局变量,或者提出更好的方法来实现这一点,我们将不胜感激。在

编辑

问题是屏幕只在第一次加载时更新。我为SwitchScreen添加了一个更新方法:

def update(self):
    self.ids.switchtitle.text = self.getTitle()

更新了.kv文件中的SwitchScreen:

<SwitchScreen>:
    on_enter:
        root.update()
    Label:
        id: switchtitle
        text: root.getTitle()
        pos_hint: {"center_x":.1, "center_y":.1}
        font_size: 25

Tags: 方法pytestself管理器屏幕mydef
2条回答

解决方案

  1. 在根小部件class ScreenManagement()中定义一个类属性,即StringProperty类型的MY\u GLOBAL。在
  2. 在kv文件中更新MY_GLOBAL。在

示例

在主.py在

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder
from kivy.properties import StringProperty


class ChooseProgScreen(Screen):
    pass


class SwitchScreen(Screen):
    pass


class ScreenManagement(ScreenManager):
    MY_GLOBAL = StringProperty('test')


class MainApp(App):

    def build(self):
        return Builder.load_file("kivy.kv")


if __name__ == "__main__":
    MainApp().run()

在千伏在

^{pr2}$

输出

Img01 - test1

class ChooseProgScreen(Screen):
    def setTitle(self, newTitle):
        global MY_GLOBAL
        MY_GLOBAL = newTitle
        print(MY_GLOBAL)

这应该能解决你的问题。MY_GLOBAL在技术上可以通过self.MY_GLOBAL获得,相反,您将其分配给方法下的一个新变量,但没有将其分配给全局变量对象。在

相关问题 更多 >

    热门问题