KivyMD报错AttributeError: 'Container'对象无'manager'属性求助
解决KivyMD中点击按钮出现AttributeError: 'Container' object has no attribute 'manager'的问题
错误根源
- 根容器错误:你的
MyApp的build方法返回的是Container,但整个应用的根应该是WindowManager,否则ScreenManager无法管理页面切换逻辑。 - 布局嵌套错误:
Container是独立的MDGridLayout,没有作为MainWindow(Screen子类)的子控件,所以它本身不具备manager属性,kv代码里的root.manager自然会报错。
修正后的代码
Python代码
from kivymd.app import MDApp from kivy.uix.button import Button from kivymd.uix.gridlayout import MDGridLayout from kivymd.theming import ThemeManager from kivy.core.window import Window from kivy.config import Config from kivy.uix.screenmanager import ScreenManager, Screen from kivy.lang import Builder Config.set('kivy', 'keyboard_mode', 'systemanddock') Window.size = (480, 853) class MainWindow(Screen): pass class SecondWindow(Screen): pass class WindowManager(ScreenManager): pass class Container(MDGridLayout): def scit(self): try: znach = str(self.text_input.text) except: znach = 'ничего не введено' class MyApp(MDApp): theme_cls = ThemeManager() title = 'Пока что так' def build(self): self.theme_cls.theme_style = 'Light' # 加载kv文件,让WindowManager作为应用根容器 return Builder.load_file("your_kv_file.kv") # 替换为你的kv文件名 if __name__ == "__main__": MyApp().run()
kv文件
WindowManager: MainWindow: SecondWindow: <MainWindow>: name: 'main' # 将Container嵌套为MainWindow的子控件 Container: id: container <ItemLabel@MDLabel>: font_size: '35sp' valign:'middle' text_size: self.size <Container>: rows: 30 padding: [30, 20, 30, 10] text_input: text_input MDTextField: id: text_input size_hint: 4, 2.4 multiline: True font_size: '45sp' input_type: 'text' hint_text: 'Введите продукты здесь' FloatLayout: MDRaisedButton: size_hint: 0.7, 0.6 pos_hint: {'center_x':0.5,'y': 0.2} text: 'Найти блюда' font_size: '25sp' on_release: root.scit() # 通过父控件MainWindow访问ScreenManager app.root.current = "second" if text_input.text.strip() != "" else "main" root.parent.manager.transition.direction = "left" <SecondWindow>: name: "second" Button: text: "Go Back" on_release: app.root.current = "main" root.manager.transition.direction = "right"
额外说明
- 修正了kv文件中
WindowManager子控件的缩进问题,确保MainWindow和SecondWindow被正确包含在ScreenManager中。 - 调整了按钮切换页面的判断逻辑,从判断
text_input.text != "None"改为text_input.text.strip() != "",符合输入框空值的实际情况。 - 修复了
MyApp中build方法的缩进错误,避免语法异常。
内容的提问来源于stack exchange,提问作者Альберт Гайсин
相关产品推荐
相关产品推荐

