【问题标题】:Python for kivy:Pass values between multiple screensPython for kivy:在多个屏幕之间传递值
【发布时间】:2015-05-15 07:19:09
【问题描述】:

我正在开发一个 kivy 应用程序,其中有两个屏幕 1.登录界面2.HomeScreen。

需要的是 -LoginScreen 类中计算的值“xyz”,将传递给HomeScreen 类的方法'insertdata',并希望在标签上显示该值。

为此,我尝试了以下代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import Screen, ScreenManager


class loginScreen(Screen):
    def __init__(self,**kwargs):
        super(HomeScreen, self).__init__(**kwargs)

    def auth(self):
        xyz=1
        self.manager.current="home"
        obj=HomeScreen()
        # 1. To Pass 'xyz' to method scrn2 
        HomeScreen.insertdata(obj)


class HomeScreen(Screen):

    def __init__(self,**kwargs):
        super(LoginScreen, self).__init__(**kwargs)
        if (a==1):
            # 2. To display label
        self.scrn2()

    def insertdata(self):
        print "screen 2"
        label=Label(text="good moring")
        self.add_widget(label)


class ScreenApp(App):
    pass

if __name__ == '__main__':
    ScreenApp().run()

这里:

  • insertdata 是从方法 auth 调用的

1) 第一种方式是正确的,因为它传递了 'xyz' 并调用方法 insertdata 但它不显示标签

2) 在第一种方式中,我必须创建一个 HomeScreen 对象,调用 insertdata,然后调用 Homescreen___init__init 调用 @ 987654330@

  • 从 __init__ 调用的插入数据

1) 在登录界面进行用户认证之前加载数据

insertdata 总共获得 3 个调用,这会影响应用启动时间。

为此建议我任何简单有效的方法。 提前致谢。

【问题讨论】:

    标签: python kivy


    【解决方案1】:

    您可以使用Screen.manager() 方法从一个屏幕获取管理器对象,使用它通过ScreenManager.get_screen() 方法检索另一个管理器对象,然后直接传递值。有关工作示例,请检查此问题的答案:Kivy - Slider Class value change on another screen

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多