如何通过按钮关闭 Kivy 弹出窗口?

2022-01-15 00:00:00 python kivy button popup dismiss

问题描述

我有一个使用 Kivy 创建的弹出窗口,其中包含 2 个按钮.用户可以通过在弹出区域外按下 (auto_dismiss = True) 或单击否"按钮来关闭弹出窗口.选择是"按钮,将退出整个应用程序.

请看相关代码:

类 ExitApp(App):def exit_confirmation(self):# popup 只能有一个 Widget.这可以通过添加 BoxLayout 来解决self.box_popup = BoxLayout(orientation = 'horizo​​ntal')self.box_popup.add_widget(Label(text = "真的退出?"))self.box_popup.add_widget(按钮(文字=是",on_press = ExitApp.exit,size_hint = (0.215, 0.075)))self.box_popup.add_widget(按钮(文字=否",on_press = self.popup_exit.dismiss,size_hint=(0.215, 0.075)))self.popup_exit = Popup(title = "退出",内容 = self.box_popup,size_hint = (0.4, 0.4),auto_dismiss = 真)self.popup_exit.open()def 退出(自我):App.get_running_app().stop()

现在的问题在于按下否"按钮.按下该按钮时,代码将退出并出现以下错误:

<块引用>

 on_press = self.popup_exit.dismiss,

AttributeError: 'Button' 对象没有属性 'popup_exit'

知道如何尽可能轻松地解决此问题吗?

解决方案

你可以通过一个惰性函数来解决这个问题

on_press = lambda *args: self.popup_exit.dismiss()

这样,仅在按下按钮且 popup_exit 已就位时才会进行查找...

I have a pop-up created with Kivy, which contains 2 buttons. User can dismiss the pop-up by pressing outside of the pop-up area (auto_dismiss = True), or by clicking the "No" button. Selecting the "Yes" button, will exit the whole application.

Please see relevant code:

class ExitApp(App):

def exit_confirmation(self):

    # popup can only have one Widget.  This can be fixed by adding a BoxLayout

    self.box_popup = BoxLayout(orientation = 'horizontal')

    self.box_popup.add_widget(Label(text = "Really exit?"))

    self.box_popup.add_widget(Button(
        text = "Yes",
        on_press = ExitApp.exit,
        size_hint = (0.215, 0.075)))

    self.box_popup.add_widget(Button(
        text = "No",
        on_press = self.popup_exit.dismiss,
        size_hint=(0.215, 0.075)))

    self.popup_exit = Popup(title = "Exit",
        content = self.box_popup,
        size_hint = (0.4, 0.4),
        auto_dismiss = True)

    self.popup_exit.open()

def exit(self):

    App.get_running_app().stop()

The problem now lays with pressing the "No" button. When that is pressed, the code exits with this error:

 on_press = self.popup_exit.dismiss,

AttributeError: 'Button' object has no attribute 'popup_exit'

Any idea how I can fix this as easily as possible?

解决方案

You can solve this issue by a lazy function

on_press = lambda *args: self.popup_exit.dismiss()

This way, the lookup will occur only when the button is pressed and popup_exit is already in place...

相关文章