如何阻止KivyMD的MDDialog组件点击外部关闭?
如何阻止KivyMD的MDDialog点击外部区域关闭?
要实现仅通过弹窗内的按钮关闭MDDialog,只需设置组件的auto_dismiss属性为False即可——这个属性默认值是True,会允许点击弹窗外部区域或按ESC键自动关闭弹窗。
修改方案
直接在KV语言的<Help>规则中添加auto_dismiss: False,或者在Python实例化Help对象时传入该参数。推荐在KV中设置,更符合Kivy的开发风格:
修改后的KV代码
Interface: <Interface>: MDScreen: name:"screen1" MDRoundFlatButton: id: start_button text:"START" font_size:70 pos_hint:{"center_x":.5,"center_y":.22} on_press: root.show_help() <Help>: auto_dismiss: False # 新增此行,阻止外部点击关闭弹窗 md_bg_color:0,0,0,0 radius:[dp(30),dp(30),dp(30),dp(30)] size_hint:.8,.2 MDBoxLayout: radius:[dp(30),dp(30),dp(30),dp(30)] md_bg_color:1,1,0,.1 orientation: "vertical" MDLabel: text:"help center" font_size: dp(30) halign:"center" pos_hint:{"top":1} MDBoxLayout: spacing: dp(5) pos_hint:{"center_x":.5} padding:dp(40),dp(1) MDIconButton: id: delete theme_text_color:"Custom" text_color:1,0,0,1 icon:"delete" icon_size:dp(40) on_press: root.close_help() MDIconButton: id: equal theme_text_color:"Custom" text_color:1,0,0,1 icon:"approximately-equal" icon_size:dp(40) on_press: root.close_help() MDIconButton: id: wifi theme_text_color:"Custom" text_color:1,0,0,1 icon:"wifi" icon_size:dp(40) on_press: root.close_help()
(可选)Python代码中设置的方式
如果更习惯在Python中控制,也可以在实例化Help对象时传入参数:
def show_help(self): global ref_help ref_help=Help(auto_dismiss=False) # 这里设置auto_dismiss ref_help.open()
效果说明
设置auto_dismiss: False后,只有调用dismiss()方法(也就是你的close_help函数里的操作)才能关闭弹窗,点击弹窗外部区域或按ESC键都不会触发关闭,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Francis Newton
相关产品推荐
相关产品推荐

