【发布时间】:2017-02-21 09:52:07
【问题描述】:
我想实现一个 kivy 应用程序,它有两个屏幕(由屏幕管理器管理)。在第一个屏幕(称为 LoginScreen)上有两个 TextInput 字段和一个按钮。在第二个屏幕上,我有两个标签,我想显示在第一个屏幕上输入的值。单击按钮后更改屏幕完成。
我设法将这些字段绑定在一起,以便将值显示在第二个屏幕上。但是,我想在第二个屏幕中“处理”这些值,不幸的是,我无法做到。
“过程”是指,我想使用定制的类(正在工作)登录我的电子邮件帐户并列出我看不见的电子邮件(由类的功能之一提供)在 kivy 列表中。
有人可以告诉我如何获取输入的值并使用它们来创建我的课程吗?
我将不胜感激任何帮助!
我的 .py 文件:
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import ListProperty, StringProperty
class MainScreenManager(ScreenManager):
pass
class LoginScreen(Screen):
entered_email_address = StringProperty('')
entered_password = StringProperty('')
def check_input(self):
text_input_email = self.ids['ti_email'].text
text_input_password = self.ids['ti_password'].text
self.entered_email_address = text_input_email
self.entered_password = text_input_password
"""
the values in this part are printed out
print self.manager
print self.manager.screens
print self.manager.get_screen('HomeScreen').email_address
print self.manager.get_screen('HomeScreen').password
"""
self.manager.current = 'HomeScreen'
class HomeScreen(Screen):
email_address = StringProperty()
password = StringProperty()
def __init__(self, *args, **kwargs):
super(HomeScreen, self).__init__(*args, **kwargs)
class TutorialApp(App):
def build(self):
return MainScreenManager()
if __name__ == '__main__':
TutorialApp().run()
我的 .kv 文件:
<MainScreenManager>:
id: screen_manager
LoginScreen:
id: login_screen
name: 'LoginScreen'
manager: screen_manager
HomeScreen:
id: home_screen
name: 'HomeScreen'
email_address: login_screen.entered_email_address
password: login_screen.entered_password
<LoginScreen>
BoxLayout:
orientation: 'vertical'
TextInput:
id: ti_email
multiline: False
size_hint_y: None
height: 40
font_size: 25
TextInput:
id: ti_password
multiline: False
size_hint_y: None
height: 40
font_size: 25
Button:
id: btn_login
text: 'Login!'
height: 100
width: 150
on_press:
root.check_input()
<HomeScreen>
BoxLayout:
orientation: 'vertical'
Label:
text: root.email_address
Label:
text: root.password
【问题讨论】:
-
您的问题是关于使用字符串属性,还是在屏幕之间传递数据?因为如果是第二个,这里有很多示例,您可以轻松找到它们。
-
感谢您的回复。我添加了源代码。如果我尝试从变量 email_addess 和密码中获取值,例如在 HomeScreen 的 init 方法中,我不能(我想将它们打印出来)。在我在 check_input 方法中注释掉的部分中,我可以访问 HomeScreen 的属性值。
-
查看本主题:link
-
在您提到的答案中,可以在 python 代码中绑定这两个属性。你能告诉我它是怎么做的吗?我更喜欢这种方式而不是另一种方式(即编写 kv 代码)。提前感谢您的回答,非常感谢您的帮助!
标签: android kivy kivy-language