在第二个屏幕上显示输入

时间:2020-07-15 20:03:02

标签: python kivy kivy-language

我想在第二个屏幕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"

1 个答案:

答案 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