您如何在 KivyMD 的屏幕中引用文本字段 ID?
How do you reference a text field ID in a screen in 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.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。
这是因为MDTextField
处于不同的class
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()
我正在尝试使用 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。
这是因为MDTextField
处于不同的class
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()