You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KivyMD初始化MDTextField部件触发ValueError报错问题咨询

报错原因

你触发该错误的核心原因是在MDApp实例初始化完成之前,就提前实例化了包含KivyMD组件的SettingsScreen、MenuScreen部件。KivyMD所有MD开头的组件,都依赖已初始化完成的MDApp实例才能正常加载,你当前的代码执行顺序是先在全局作用域实例化Screen、添加到ScreenManager,之后才创建DemoApp实例,执行顺序完全不符合KivyMD的要求。

修复方案
  • 把ScreenManager的实例化、Screen的添加逻辑,移动到DemoApp的build方法内部,不要在全局作用域提前执行。
  • 你原代码还存在一个额外逻辑错误:profileinfo.add_widget(profileinfo)是将部件自身添加到自身,会触发递归报错,需要删除。

修复后完整代码参考:

from kivymd.app import MDApp
from kivymd.uix.screen import MDScreen, Screen
from kivymd.uix.boxlayout import MDBoxLayout
from kivy.uix.screenmanager import ScreenManager
# 其余依赖如FitImage、EffectWidget、FitImageButton等导入自行补全

class SettingsScreen(Screen):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        
        self.scr = MDScreen()
        box = MDBoxLayout(orientation='vertical', padding=['10dp', '30dp', '10dp', '50dp'])
        imagebox = MDBoxLayout(size=(350,350), size_hint=(None,None), pos_hint={'center_x':.5})
        blur = EffectWidget()
        blur.add_widget(FitImage(source='makeblur.png'))
        blur.effects =[HorizontalBlurEffect(size=10), VerticalBlurEffect(size=10)]
        profpic = FitImageButton(source='prof.png', radius=[250, 0], on_release=self.iii)
        self.scr.add_widget(blur)
        imagebox.add_widget(profpic)
        box.add_widget(imagebox)
        box.add_widget(Widget(size_hint=(None, None), height='25dp'))
        username = Label(text='name', font_name='bebas-neue-bold.ttf', size_hint_y=None, height=5)
        box.add_widget(username)
        box.add_widget(MDBoxLayout(size_hint=(None,None)))
        profileinfo = MDScreen(md_bg_color=[1,1,1,1])
        profileinfo.add_widget(Label(size_hint=(.5, .1), pos_hint={"center_x":.6, "center_y":.8}, text='www'))
        profileinfo.add_widget(Label(text='Contact Data', color=[.1,.1,.1,1], pos=(-300,465),  font_name='bebas-neue-bold.ttf'))
        profileinfo.add_widget(Label(text='Email', color=[.1,.1,.1,1], pos=(-330,345),  font_name='bebas-neue-bold.ttf'))
        
        # 已删除递归添加的错误代码
        self.scr.add_widget(box)
        self.add_widget(profileinfo)
        
    def iii(self, *args):
        print('www')
        selectimage = MDBoxLayout(md_bg_color=[1, 1, 1, 1], orientation='vertical')

    def change_screen(self, event):
        self.manager.transition.direction = 'right'
        self.manager.current = 'menu'

class MenuScreen(Screen):
    # 你自己的MenuScreen逻辑保留即可
    pass

class DemoApp(MDApp):
    def build(self):
        # Screen相关初始化逻辑移到build方法,保证MDApp已完成初始化
        sm = ScreenManager()
        sm.add_widget(MenuScreen(name='menu'))
        sm.add_widget(SettingsScreen(name='settings'))
        return sm

DemoApp().run()
注意事项

所有涉及KivyMD组件的实例化操作,都要放在MDApp实例初始化之后执行,不要放在全局作用域。

内容的提问来源于stack exchange,提问作者KryptonH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:45:05