Kivy:如何更改ScreenManager的“current”属性__

2024-04-24 20:16:56 发布

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

我的应用程序是一个屏幕管理器。根据具体情况,我希望应用程序打开时活动屏幕为“屏幕1”或“屏幕2”。我该怎么做才是最优雅的方式呢?我认为这和在初始化应用程序时更改current属性一样简单。可悲的是,这行不通。以下是我应该做的:

在主.py公司名称:

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

     def __init__(self, **kwargs):
         super(MyApp, self).__init__(**kwargs)

         if foo: # Here's the problem:
             self.root.current = "Screen 1"
         else:
             self.root.current = "Screen 2"

在千伏公司名称:

^{pr2}$

但它没有。抛出以下错误:

    self.root.current = "Screen 1"
AttributeError: 'NoneType' object has no attribute 'current'

我的猜测是,在设置root之前,我将current属性设置为early。我的想法是1)为MyApp创建一个属性var,2)将current设置为该属性,3)在init方法中更改该属性。这是一个很大的努力和代码混乱只是改变一个屏幕上的初始化。在

我该怎么做?提前谢谢你!在


Tags: self名称应用程序管理器属性屏幕initdef
1条回答
网友
1楼 · 发布于 2024-04-24 20:16:56

这只是因为您没有指定self.root对象。为什么您需要在__init__期间更改屏幕?您应该使用build函数。在

我的例子:

import random

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager

Builder.load_string('''
<Root>:
    Screen:
        name: "Screen 1"
        Label:
            text: "Screen 1!"

    Screen:
        name:"Screen 2"
        Label:
            text: "Screen 2!"
''')

class Root(ScreenManager):
    pass

class MyApp(App):
    def build(self):
        self.root = Root()

        foo = random.randint(0,1)
        if foo:
            self.root.current = "Screen 1"
        else:
            self.root.current = "Screen 2"

        return self.root



MyApp().run()

self.root.cureent_screen对象可见之前,self.root.cureent_screen属性将被更改

相关问题 更多 >