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

MDTopAppBar无内容显示:复制官方代码运行结果不符预期

MDTopAppBar显示异常问题排查

问题描述

复制KivyMD官网提供的MDTopAppBar示例代码后,运行结果与官网展示完全不同,且自行开发时MDTopAppBar始终无内容显示。示例代码如下:

from kivy.lang import Builder
from kivy.metrics import dp
from kivymd.app import MDApp
from kivymd.uix.menu import MDDropdownMenu
from kivymd.uix.snackbar import MDSnackbar

KV = '''
MDBoxLayout:
    orientation: "vertical"

    MDTopAppBar:
        title: "MDTopAppBar"
        left_action_items: [["menu", lambda x: app.callback(x)]]
        right_action_items: [["dots-vertical", lambda x: app.callback(x)]]

    MDLabel:
        text: "Content"
        halign: "center"
'''


class Test(MDApp):
    def build(self):
        self.theme_cls.primary_palette = "Orange"
        self.theme_cls.theme_style = "Dark"
        menu_items = [
            {
                "text": f"Item {i}",
                "on_release": lambda x=f"Item {i}": self.menu_callback(x),
            } for i in range(5)
        ]
        self.menu = MDDropdownMenu(items=menu_items)
        return Builder.load_string(KV)

    def callback(self, button):
        self.menu.caller = button
        self.menu.open()

    def menu_callback(self, text_item):
        self.menu.dismiss()
        MDSnackbar(text=text_item).open()


Test().run()

问题原因

核心原因是KivyMD版本不兼容:官网文档示例通常对应最新稳定版,但当前使用的KivyMD版本可能较旧,组件API或默认行为存在差异,导致MDTopAppBar渲染异常、菜单功能失效。

解决方案

1. 升级KivyMD到最新稳定版

执行以下命令升级:

pip install --upgrade kivymd

升级后直接运行原代码即可匹配官网展示效果。

2. 适配旧版本代码(如果无法升级)

若因环境限制无法升级,需调整代码适配旧版本KivyMD的API:

  • 给MDTopAppBar明确设置高度,避免布局挤压导致无内容显示
  • 给MDDropdownMenu指定width_mult参数,确保菜单正常显示

修改后的代码:

from kivy.lang import Builder
from kivy.metrics import dp
from kivymd.app import MDApp
from kivymd.uix.menu import MDDropdownMenu
from kivymd.uix.snackbar import MDSnackbar

KV = '''
MDBoxLayout:
    orientation: "vertical"

    MDTopAppBar:
        title: "MDTopAppBar"
        left_action_items: [["menu", lambda x: app.callback(x)]]
        right_action_items: [["dots-vertical", lambda x: app.callback(x)]]
        size_hint_y: None
        height: dp(64)

    MDLabel:
        text: "Content"
        halign: "center"
'''


class Test(MDApp):
    def build(self):
        self.theme_cls.primary_palette = "Orange"
        self.theme_cls.theme_style = "Dark"
        menu_items = [
            {
                "text": f"Item {i}",
                "on_release": lambda x=f"Item {i}": self.menu_callback(x),
            } for i in range(5)
        ]
        # 添加width_mult参数,适配旧版本菜单宽度
        self.menu = MDDropdownMenu(items=menu_items, width_mult=4)
        return Builder.load_string(KV)

    def callback(self, button):
        self.menu.caller = button
        self.menu.open()

    def menu_callback(self, text_item):
        self.menu.dismiss()
        MDSnackbar(text=text_item).open()


Test().run()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:43:26