我想在第二个屏幕Eingabe
的标签中显示从屏幕Ausgabe
输入的文本字段。我不了解这种奇异的语言。
谢谢!
我总是得到一个错误:
self or 'ausgabe' is not defined
如何从第二个屏幕类Ausgabe
的第一个屏幕输入的文本字段中访问值,并在第二个屏幕的标签von中显示结果?
main.py:
from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.theming import ThemeManager
from kivymd.uix.screen import MDScreen
from kivy.properties import ObjectProperty, StringProperty
from kivy.garden.matplotlib.backend_kivyagg import FigureCanvasKivyAgg
from kivy.uix.widget import Widget
from kivy.core.window import Window
import matplotlib.pyplot as plt
from kivymd.uix.datatables import MDDataTable
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from time import sleep
from kivy.metrics import dp
class Eingabe(MDScreen):
kapital = ObjectProperty(None)
text1 = ObjectProperty(None)
t = ''
def btn(self):
print(self.kapital.text)
self.text1.text = str('Endsumme: ' + self.kapital.text)
t = self.kapital.text
pass
class Ausgabe(MDScreen):
#tabelle = ObjectProperty(None)
eingabe1 = ausgabe.manager.get_screen('eingabe')
self.ausgabe.text = str(eingabe1.t)
pass
class WindowManager(ScreenManager):
pass
Window.size = (540, 960)
class main2App(MDApp):
title = "Sparplanrechner"
def build(self):
#self.theme_cls.primary_palette = "Blue"
self.theme_cls.theme_style = "Light"
return Builder.load_file("main2.kv")
if __name__ == "__main__":
main2App().run()
main2.kv:
WindowManager:
Eingabe:
Ausgabe:
<Eingabe>:
name: "eingabe"
kapital: kapital
rate: rate
zins: zins
zeit: zeit
text1: text1
ausgabe: ausgabe
MDGridLayout:
#adaptive_size: True
md_bg_color: 1,1,1,1
padding: dp(40)
spacing: dp(40)
cols: 1
MDTextField:
hint_text: "Steuerfreibetrag"
id: zeit
font_size: sp(20)
helper_text: "Steuerfreibetrag (i.d.R. 801€)"
helper_text_mode: "on_focus"
mode: "rectangle"
fill_color: 0, 0, 0, 0
MDLabel:
text: ''
id: text1
halign: "center"
valign: 'middle'
theme_text_color: "Custom"
text_color: 207,95,54, 1
font_style: "H6"
bold: True
MDGridLayout:
#adaptive_size: True
md_bg_color: 1,1,1,1
padding: dp(40)
spacing: dp(40)
cols: 2
MDRaisedButton:
text: "Berechnen"
#text_color: 0, 0, 0, 1
font_size: "20sp"
pos_hint: {'center_x':0.5,'center_y':.5}
on_release: root.btn()
MDRaisedButton:
text: "Zeige Deteils"
font_size: "20sp"
pos_hint: {'center_x':0.5,'center_y':.5}
on_release:
app.root.current = "ausgabe"
root.manager.transition.direction = "left"
<Ausgabe>:
name: "ausgabe"
#tabelle: tabelle
#MDDataTable:
# id: tabelle
#column_data:[("Column 1", dp(30)),("Column 4", dp(30))]
MDLabel:
text: ''
id: ausgabe
halign: "center"
valign: 'middle'
theme_text_color: "Custom"
text_color: 207,95,54, 1
font_style: "H6"
bold: True
MDRaisedButton:
text: "Go Back"
on_release:
app.root.current = "eingabe"
root.manager.transition.direction = "right"
答案 0 :(得分:0)
您可以使用on_enter()
Ausgabe
的{{1}}方法来执行此操作,如下所示:
Screen
显示屏幕时将调用class Ausgabe(MDScreen):
def on_enter(self, *args):
self.ids.ausgabe.text = self.manager.get_screen('eingabe').zeit.text
方法,因此只要显示on_enter()
MDLabel
,它将更新Ausgabe
。