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

2024-09-30 08:38:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用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()

当函数set_date()运行时,它会与AttributeError: 'super' object has no attribute '__getattr__'一起崩溃,因为如果MDTextField在屏幕内,我不知道如何引用它


Tags: textfromimportselfdate屏幕themescreen
1条回答
网友
1楼 · 发布于 2024-09-30 08:38:19

这是因为MDTextField在另一个类中

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.picker import MDDatePicker
from kivymd.uix.picker import MDThemePicker

Window.size = (350, 700)

screen_helper = """
Screen:
    ScreenManager:
        AssignmentScreen:
            id: assignment_scr

<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 __init__(self, **kwargs):
        super().__init__(**kwargs)

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

    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.assignment_scr.ids.pickedDates.text = "test"


AssignmentTracker().run()

相关问题 更多 >

    热门问题