如何实现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
相关产品推荐
相关产品推荐

