我正在开发一个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
下面:
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
1)它在登录屏幕上的用户身份验证之前加载数据
init
总共 3次调用,这会影响应用启动时间。
建议我任何简单有效的方法。 提前谢谢。
答案 0 :(得分:2)
您可以使用Screen.manager()
方法从一个屏幕获取管理器对象,使用它以ScreenManager.get_screen()
方法检索另一个,然后直接传递该值。有关工作示例,请查看此问题的答案:Kivy - Slider Class value change on another screen