gpt4 book ai didi

python-2.7 - 在kivy python中在屏幕之间交换变量

转载 作者:行者123 更新时间:2023-12-02 21:20:56 25 4
gpt4 key购买 nike

我尝试制作一个应用程序,有两个屏幕,一个带有文本输入,另一个带有标签,用于显示文本输入的文本。我尝试通过在应用程序类中创建 StringProperty 来实现此目的,但访问该属性时遇到问题。我想知道如何访问变量。这是源代码:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import StringProperty
from kivy.uix.boxlayout import BoxLayout


class Manager(ScreenManager):
pass
class FirstScreen(Screen):
pass
class SecondScreen(Screen):
pass
root_widget = Builder.load_string('''
Manager:
FirstScreen:
SecondScreen:
<FirstScreen>:
name: 'first'
BoxLayout:
orientation: 'vertical'
TextInput:
id: my_text
font_size: 50
Button:
id: b1
text: 'Go to next Screen'
on_release: app.root.current = 'second'
<SecondScreen>:
name: 'second'
BoxLayout:
orientation: 'vertical'
Label:
id: my_Label
text: root.txt
Button
id: b2
text: 'Go back'
on_release: app.root.current = 'first'
''')
class Caption(App):
txt = StringProperty('')
def build(self):
return root_widget

Caption().run()

最佳答案

Screen 类有一个名为“manager”的属性,它指定该屏幕属于哪个管理器。在ScreenManager类中,有一个名为“screens”的属性,它是一个保存所有屏幕的ListProperty对象。如果你想获取另一个屏幕的信息,你可以使用这种方式。在您的情况下,您需要使用以下内容更新 kv Builder 中的 b1 id 按钮:

Button:
id: b1
text: 'Go to next screen'
on_release:
root.manager.screens[1].ids.my_Label.text = root.ids.my_text.text
root.manager.current = 'second'

对于更复杂的行为,您可以在特定的 Page 类中定义相关的属性,并通过 python 进行访问:

self.manager.screens[<screen_number>].ids.<widget_id>.<property_name>

关于python-2.7 - 在kivy python中在屏幕之间交换变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27758126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com