Python 如何在KivyMD中的屏幕中引用文本字段ID?

Python 如何在KivyMD中的屏幕中引用文本字段ID?,python,kivy,kivymd,Python,Kivy,Kivymd,我试图使用python编写的函数在KivyMD中编辑屏幕中的文本字段。如果kivy代码不是作为屏幕的一部分,但一旦在屏幕上出现ID问题,那么它就可以正常工作 from kivymd.app import MDApp from kivy.core.window import Window from kivy.lang import Builder from kivy.uix.screenmanager import Screen, ScreenManager from kivymd.uix.gri

我试图使用python编写的函数在KivyMD中编辑屏幕中的文本字段。如果kivy代码不是作为屏幕的一部分,但一旦在屏幕上出现ID问题,那么它就可以正常工作

from kivymd.app import MDApp
from kivy.core.window import Window
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen, ScreenManager
from kivymd.uix.gridlayout import MDGridLayout
from kivymd.uix.picker import MDDatePicker
from kivymd.uix.picker import MDThemePicker

screen_helper = """
ScreenManager:
    AssignmentScreen:

<AssignmentScreen>:
    name: 'assignment'
    MDGridLayout:
        pos_hint: {'center_y':0.5}
        rows: 6
        row_default_height: 125
        adaptive_height: True
        MDTextField:
            hint_text: "Assignment title"
        MDTextField:
            hint_text: "Module"
        MDBoxLayout:
            MDTextField:
                id: pickedDates
                hint_text: "Deadline"
            MDRectangleFlatButton:
                text: "Pick Date"
                on_press: app.show_date_picker()
        MDTextField:
            hint_text: "Estimated hours"
        MDTextField:
            hint_text: "Assignment Weight (%)"
"""


class AssignmentScreen(Screen):
    pass


sm = ScreenManager()
sm.add_widget(AssignmentScreen(name='assignment'))


class AssignmentTracker(MDApp):

    def show_theme_picker(self):
        theme_dialog = MDThemePicker()
        theme_dialog.open()

    def show_date_picker(self):
        MDDatePicker(self.set_date).open()

    def set_date(self, date_obj):
        self.root.ids.pickedDates.text = "test"
        pass

    def build(self):
        self.theme_cls.theme_style = "Dark"
        screen = Builder.load_string(screen_helper)
        return screen

Window.size = (350, 700)
AssignmentTracker().run()
从kivymd.app导入MDApp
从kivy.core.window导入窗口
从kivy.lang导入生成器
从kivy.uix.screenmanager导入屏幕,screenmanager
从kivymd.uix.gridlayout导入MDGridLayout
从kivymd.uix.picker导入MDDatePicker
从kivymd.uix.picker导入MDThemePicker
屏幕_helper=“”
屏幕管理器:
分配屏幕:
:
姓名:“任务”
MDGridLayout:
pos_提示:{'center_y':0.5}
行数:6
行\默认\高度:125
自适应高度:真
MDTextField:
提示文字:“作业标题”
MDTextField:
提示文字:“模块”
MDBoxLayout:
MDTextField:
id:pickedDates
提示文字:“截止日期”
MDRectangleFlatButton:
文本:“选择日期”
按:app.show\u date\u picker()
MDTextField:
提示文字:“估计小时数”
MDTextField:
提示文字:“分配权重(%)”
"""
班级分配屏幕(屏幕):
通过
sm=屏幕管理器()
sm.add_小部件(AssignmentScreen(name='assignment'))
类分配跟踪程序(MDApp):
def显示主题选择器(自身):
theme_dialog=MDThemePicker()
theme_dialog.open()
def显示日期选择器(自身):
MDDatePicker(self.set_date).open()
def设置日期(自身、日期对象):
self.root.ids.pickedDates.text=“测试”
通过
def生成(自):
self.theme\u cls.theme\u style=“深色”
screen=Builder.load\u字符串(screen\u助手)
返回屏幕
Window.size=(350700)
AssignmentTracker().run()

当函数set_date()运行时,它会与AttributeError一起崩溃:“super”对象没有属性“\uuu getattr\uuuu”,因为我不知道如何引用屏幕中的MDTextField。

这是因为
MDTextField
在不同的类中

从kivymd.app导入MDApp
从kivy.core.window导入窗口
从kivy.lang导入生成器
从kivy.uix.screenmanager导入屏幕,screenmanager
从kivymd.uix.picker导入MDDatePicker
从kivymd.uix.picker导入MDThemePicker
Window.size=(350700)
屏幕_helper=“”
屏幕:
屏幕管理器:
分配屏幕:
id:assignment\u scr
:
姓名:“任务”
MDGridLayout:
pos_提示:{'center_y':0.5}
行数:6
行\默认\高度:125
自适应高度:真
MDTextField:
提示文字:“作业标题”
MDTextField:
提示文字:“模块”
MDBoxLayout:
MDTextField:
id:pickedDates
提示文字:“截止日期”
MDRectangleFlatButton:
文本:“选择日期”
按:app.show\u date\u picker()
MDTextField:
提示文字:“估计小时数”
MDTextField:
提示文字:“分配权重(%)”
"""
班级分配屏幕(屏幕):
通过
sm=屏幕管理器()
sm.add_小部件(AssignmentScreen(name='assignment'))
类分配跟踪程序(MDApp):
定义初始(自我,**kwargs):
超级()
def生成(自):
self.theme\u cls.theme\u style=“深色”
screen=Builder.load\u字符串(screen\u助手)
返回屏幕
def显示主题选择器(自身):
theme_dialog=MDThemePicker()
theme_dialog.open()
def显示日期选择器(自身):
MDDatePicker(self.set_date).open()
def设置日期(自身、日期对象):
self.root.ids.assignment\u scr.ids.pickedDates.text=“测试”
AssignmentTracker().run()