Python for kivy:在多个屏幕之间传递值

时间:2015-05-15 07:19:09

标签: python kivy

我正在开发一个kivy应用程序,其中有两个屏幕 的 1.LoginScreen  和 2.HomeScreen。

需要的是 -  在类- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.row == longLabelRowNumber) { //Just for demonstration return longLabelRowHeight; } else { return kNormalCellHeight; } } 中计算的值'xyz',将传递给类LoginScreen的方法'insertdata',并希望在标签上显示该值。

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

HomeScreen

下面:

  • 从方法auth
  • 调用insertdata

1)第一种方式是正确的,因为它正在传递'xyz'并调用方法#!/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() 但它不显示标签

2)在第一种方式中我必须创建以创建HomeScreen的对象,以调用insertdata,然后调用insertdata ___init__ {{1 }} 调用Homescreen

  • 从__init __
  • 调用的insertdata

1)它在登录屏幕上的用户身份验证之前加载数据

init总共 3次调用,这会影响应用启动时间。

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

1 个答案:

答案 0 :(得分:2)

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