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

KivyMD如何实现点击工具栏操作项弹出下拉菜单功能

KivyMD工具栏点击弹出下拉菜单实现方案

你需要将触发菜单的载体从居中的MDDropDownItem替换为MDTopAppBar(工具栏)的右侧动作按钮,同时调整菜单的弹出位置、尺寸参数匹配示例效果,完整可运行代码如下:

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

KV = '''
MDScreen:
    MDTopAppBar:
        id: app_bar
        title: "示例应用"
        pos_hint: {"top": 1}
        right_action_items: [["dots-vertical", lambda x: app.menu.open()]]
'''

class Test(MDApp):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.screen = Builder.load_string(KV)
        d_items = ['Snapshot','Settings','History','Logout','Exit']
        menu_items = [
            {
                "viewclass": "OneLineListItem",
                "text": i,
                "height": dp(48),
                "on_release": lambda x=i: self.menu_item_click(x),
            } for i in d_items
        ]
        self.menu = MDDropdownMenu(
            # 通过id绑定工具栏右侧动作按钮作为触发源,稳定性更高
            caller=self.screen.ids.app_bar.ids.right_actions.children[0],
            items=menu_items,
            # 菜单从触发按钮下方弹出,匹配示例位置
            position="bottom",
            # 调整菜单宽度适配内容
            width_mult=3,
        )

    def menu_item_click(self, text_item):
        # 这里写对应菜单项的点击逻辑
        print(f"点击了{text_item}")
        self.menu.dismiss()

    def build(self):
        return self.screen

Test().run()

关键调整说明

  • 布局中新增了MDTopAppBar组件,将三个点的动作按钮放在工具栏右侧,点击直接触发菜单弹出
  • 菜单的position参数设置为bottom,保证菜单从触发按钮的下方弹出,和示例图的展示位置一致
  • 调整了菜单项高度为dp(48),符合移动端交互规范,和示例样式对齐
  • 菜单宽度width_mult调整为3,刚好适配菜单项的文本长度,不会出现多余留白或文字折行

参考效果示例:
示例图1
示例图2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:09:03