我正在尝试将最终用户从文本框输入的值打印到第二个屏幕上的标签。但是,它似乎不起作用,代码返回属性错误 - '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"
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()