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

如何实现KivyMD下拉菜单内容禁止滚动?

解决KivyMD下拉菜单禁止滚动的问题

要实现禁止MDDropdownMenu内容滚动,关键是要找到菜单内部的ScrollView组件并禁用其滚动功能——直接给MDDropdownMenu设置effect_cls不会生效,因为该属性属于内部的ScrollView而非菜单本身。以下是可行的解决方案:

方法一:直接禁用ScrollView的滚动开关

创建MDDropdownMenu实例后,通过其scroll_view属性访问内部滚动容器,关闭横向和纵向的滚动功能:

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

KV = '''
MDBoxLayout:
  MDAnchorLayout:
    MDRaisedButton:
      text: "Saikat"
      on_press: app.open_drop(self)
  MDWidget:
    md_bg_color: "red"
'''

class Test(MDApp):
  def build(self):
      return Builder.load_string(KV)

  def open_drop(self, x):
    menu = MDDropdownMenu(
      caller = x,
      width_mult = 3,
      items= [
        {"viewclass": "OneLineListItem", "text": "Saikat"},
        {"viewclass": "OneLineListItem", "text": "测试项1"},
        {"viewclass": "OneLineListItem", "text": "测试项2"}
      ]
    )
    # 禁用横向和纵向滚动
    menu.scroll_view.do_scroll_x = False
    menu.scroll_view.do_scroll_y = False
    menu.open()

if __name__ == "__main__":
  Test().run()

方法二:设置无滚动效果类

另一种方式是将ScrollView的effect_cls设置为'NoScrollEffect',彻底移除滚动效果:

# 在创建菜单后添加这行代码替代滚动开关设置
menu.scroll_view.effect_cls = 'NoScrollEffect'

这两种方法在KivyMD 1.1.1/1.2.0、Kivy 1.9.0/2.0.0版本中均能生效,核心是直接操作菜单内部的ScrollView组件,而非菜单本身的属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:15:21