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

如何阻止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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 06:16:09