Python 2.7 调用在kivy'中不起作用的变量;s-kv语言
我的问题是,在一个屏幕上设置变量后,如何在另一个屏幕上调用它 以下是我尝试执行的代码: main.pyPython 2.7 调用在kivy'中不起作用的变量;s-kv语言,python-2.7,kivy,kivy-language,Python 2.7,Kivy,Kivy Language,我的问题是,在一个屏幕上设置变量后,如何在另一个屏幕上调用它 以下是我尝试执行的代码: main.py import kivy kivy.require('1.10.0') from kivy.app import App from kivy.uix.screenmanager import Screen, ScreenManager class Manager(ScreenManager): pass class FirstScreen(Screen): pass cla
import kivy
kivy.require('1.10.0')
from kivy.app import App
from kivy.uix.screenmanager import Screen, ScreenManager
class Manager(ScreenManager):
pass
class FirstScreen(Screen):
pass
class SecondScreen(Screen):
pass
class ExampleApp(App):
def build(self):
return Manager()
if __name__ == '__main__':
ExampleApp().run()
例1.kv
#: import sm kivy.uix.screenmanager
#: set Question 'not working'
<Manager>
transition: sm.FadeTransition()
FirstScreen:
SecondScreen:
<FirstScreen>
BoxLayout:
TextInput:
id: txt
multiline: False
Button:
text: 'Press Me'
on_release:
Question = txt.text
app.root.current = 'Next'
<SecondScreen>
name: 'Next'
Label:
text: Question
#:导入sm kivy.uix.screenmanager
#:设置问题“不工作”
转换:sm.FadeTransition()
第一屏:
第二屏:
盒子布局:
文本输入:
id:txt
多行:False
按钮:
文字:“按我”
发布时:
问题=txt.text
app.root.current='Next'
姓名:“下一个”
标签:
正文:问题
当这个运行时,一切都正常工作。只有一个例外。SecondScreen上的标签显示“不工作”,而它应该读取我在FirstScreen上输入的文本。为什么我不能完成此任务?您必须提供id标记,并使用ids方法或ObjectProperty引用变量。有关详细信息,请参考下面的两个示例 示例1-使用ids方法 id是小部件的一个弱点 main.py 例1.kv objectproperty.kv
#:kivy 1.10.0
#:导入FadeTransition kivy.uix.screenmanager.FadeTransition
#:设置问题“不工作”
第二屏幕:第二屏幕
转换:FadeTransition()
第一屏:
第二屏:
id:第二个屏幕
盒子布局:
文本输入:
id:txt
文字:“工作!”
多行:False
按钮:
文字:“按我”
发布时:
root.manager.second_screen.label.text=txt.text
app.root.current='Next'
姓名:“下一个”
标签:标签
标签:
id:标签
正文:问题
输出-使用ObjectProperty
非常好用,谢谢你,我甚至没有想到id,因为它们很脆弱,很容易被忽视。你是对的,id就是脆弱。使用ObjectProperty的“最佳实践”。这将创建一个直接引用,提供更快的访问,并且更加明确。我添加了另一个使用ObjectProperty的示例。详情请参阅。
from kivy.app import App
from kivy.uix.screenmanager import Screen, ScreenManager
class Manager(ScreenManager):
pass
class FirstScreen(Screen):
pass
class SecondScreen(Screen):
pass
class ExampleApp(App):
def build(self):
return Manager()
if __name__ == '__main__':
ExampleApp().run()
#:kivy 1.10.0
#:import FadeTransition kivy.uix.screenmanager.FadeTransition
#: set Question 'not working'
<Manager>
transition: FadeTransition()
FirstScreen:
SecondScreen:
id: second_screen
<FirstScreen>
BoxLayout:
TextInput:
id: txt
text: "Working!"
multiline: False
Button:
text: 'Press Me'
on_release:
root.manager.ids.second_screen.ids.label.text = txt.text
app.root.current = 'Next'
<SecondScreen>
name: 'Next'
Label:
id: label
text: Question
from kivy.app import App
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.properties import ObjectProperty
class Manager(ScreenManager):
second_screen = ObjectProperty()
class FirstScreen(Screen):
pass
class SecondScreen(Screen):
label = ObjectProperty()
class ObjectPropertyApp(App):
def build(self):
return Manager()
if __name__ == '__main__':
ObjectPropertyApp().run()
#:kivy 1.10.0
#:import FadeTransition kivy.uix.screenmanager.FadeTransition
#: set Question 'not working'
<Manager>
second_screen: second_screen
transition: FadeTransition()
FirstScreen:
SecondScreen:
id: second_screen
<FirstScreen>
BoxLayout:
TextInput:
id: txt
text: "Working!"
multiline: False
Button:
text: 'Press Me'
on_release:
root.manager.second_screen.label.text = txt.text
app.root.current = 'Next'
<SecondScreen>
name: 'Next'
label: label
Label:
id: label
text: Question