我有两个屏幕,一个有输入,另一个显示输出。当输入输入并按下执行按钮时,必须出现一个弹出窗口并显示``您要转移值吗?''。如果按No(否),则转到第二个屏幕并显示上一个值。如果按是,则转到第二个屏幕,并在kivy屏幕中显示新值。需要帮助。
from kivy.properties import StringProperty,ObjectProperty
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.popup import Popup
class Screen1(Screen):
text = StringProperty('')
def changetext(self):
self.text = self.text11.text
def erroropen(self):
Error_Change().open()
class Error_Change(Popup):
def changetext(self):
Screen1().changetext()
class Screen2(Screen):
label_text = StringProperty('')
class screenApp(App):
pass
screenApp().run()
ScreenManager:
id: screen_manager
Screen1:
id: screen_1
name: 'screen1'
Screen2:
name: 'screen2'
label_text: screen_1.text
<Screen1>:
text11:text11
BoxLayout:
orientation:'vertical'
TextInput:
id:text11
Button:
text: 'Screen 2'
on_press:
root.manager.current='screen2'
Button:
text: 'Set Value and go to screen 2'
on_press:
root.erroropen()
<Error_Change>:
id:pop3
title:'Alert!!!'
size_hint: .65,.4
auto_dismiss: False
BoxLayout
orientation: 'vertical'
spacing:0
padding:[0,0,0,10]
size:self.size
Label:
text:'Do you want to start cycling with this configuration?'
font_size:20
bold:True
BoxLayout:
orientation: 'horizontal'
font_size:15
padding:[30,10,30,10]
size_hint:1,.6
spacing:20
Button:
text:'Continue'
on_release:
root.changetext()
app.root.current='screen2'
pop3.dismiss()
bold:True
background_normal: ''
background_color: (.75, .2, .01,1)
Button:
text:'Cancel'
on_release: pop3.dismiss()
bold:True
background_normal: ''
background_color: (.1, .8, 0,1)
<Screen2>:
BoxLayout:
Label:
text: root.label_text
Button:
text: 'Screen 1'
on_press:
root.manager.current='screen1'
答案 0 :(得分:0)
我不知道为什么,但这是一个很常见的错误。基本上,这归因于对python中的类和实例之间的区别的误解,或者至少是关于kivy小部件的区别。
在change_text
中,您将创建一个新的Screen1实例,而不是在您的应用程序中使用现有的实例。这不会有任何效果,因为此新实例未添加到您的应用程序中(也不应该添加到您的应用程序中),并且一旦python知道它没有用于任何东西,它将被销毁。
您想要的是获取对现有Screen1实例的引用,一种获取方法是首先获取对您的App实例的引用,并使用其ids
的{{1}}属性属性(指向窗口小部件树的底部)。
您可以使用root
获取“ app”对象(与kv中的App.get_running_app()
相同),并使用带有正确参数的app
。或者,您可以跳过此步骤,直接从kvlang调用app.root.ids.screen_1.change_text()
。