在不同屏幕上的标签上显示输入框中的文本

问题描述 投票:0回答:1

我正在尝试将最终用户从文本框输入的值打印到第二个屏幕上的标签。但是,它似乎不起作用,代码返回属性错误 - 'super' 对象没有属性 'getattr'。您的意思是:“setattr”吗?

我是Python新手,正在寻求专家来帮助我。

下面附有 python 代码和 kv 文件 -


from datetime import datetime
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import StringProperty, NumericProperty
from kivy.uix.textinput import TextInput

class InputWindow(Screen):
    pass
    def CalculatePrediction(self):
        DateToCalculate = StringProperty()
        DateToCalculate = self.ids.dateofbirth.text
        self.manager.get_screen("DataWindow").ids["PredictorText"].text = DateToCalculate
        self.manager.current = "DataWindow"
        
class DataWindow(Screen):
    pass

  
class WindowManager(ScreenManager):
    pass    

kv = Builder.load_file('agepredictor.kv')

class AgePredictorApp(App):
    def build(self):
        return kv

    
if __name__ == '__main__':
    AgePredictorApp().run()
    

kv 文件附在下面 -

WindowManager:
    InputWindow:
    DataWindow:

<InputWindow>:
    name: "InputWindow"
    size: root.width, root.height

    GridLayout: 
        cols: 1
        Label:
            name: "DateofBirthLabel"
            text: "Enter your Birth Date (DD/MM/YYYY)" 
        TextInput:
            id: "dateofbirth"

        Button:
            name: "Calculate"
            on_release:
                name: "CalculateButton"
                root.CalculatePrediction()
                root.manager.transition.direction = "left"
                
        

<DataWindow>:
    name: "DataWindow"
    size: root.width, root.height

    GridLayout:
        cols: 1
        Label:
            id: PredictorText
        Button:
            name: "BackButton"
            on_release: 
                app.root.current = "InputWindow"
                root.manager.transition.direction = "right"
python kivy
1个回答
2
投票

InputWindow 类的CalculatePrediction 方法中StringProperty 的使用不正确。不应在方法内重新定义 StringProperty。相反,您应该直接访问在 TextInput 中输入的文本并将其分配给数据窗口中的 PredictorText 标签。

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen

class InputWindow(Screen):
    def CalculatePrediction(self):
        DateToCalculate = self.ids.dateofbirth.text
        self.manager.get_screen("DataWindow").ids["PredictorText"].text = DateToCalculate
        self.manager.current = "DataWindow"
        
class DataWindow(Screen):
    pass
  
class WindowManager(ScreenManager):
    pass    

kv = Builder.load_string('''
WindowManager:
    InputWindow:
    DataWindow:

<InputWindow>:
    name: "InputWindow"
    size: root.width, root.height

    GridLayout: 
        cols: 1
        Label:
            name: "DateofBirthLabel"
            text: "Enter your Birth Date (DD/MM/YYYY)" 
        TextInput:
            id: dateofbirth

        Button:
            name: "Calculate"
            on_release:
                root.CalculatePrediction()
                root.manager.transition.direction = "left"

<DataWindow>:
    name: "DataWindow"
    size: root.width, root.height

    GridLayout:
        cols: 1
        Label:
            id: PredictorText
        Button:
            name: "BackButton"
            on_release: 
                app.root.current = "InputWindow"
                root.manager.transition.direction = "right"
''')

class AgePredictorApp(App):
    def build(self):
        return kv

if __name__ == '__main__':
    AgePredictorApp().run()
© www.soinside.com 2019 - 2024. All rights reserved.