如何在Kivy应用程序退出时运行方法

时间:2019-02-03 08:22:42

标签: python kivy

当用户尝试退出应用程序时,我想运行一个方法,类似于“无论您确定要退出”还是“是否要保存文件”类型的消息,只要用户尝试通过单击窗口顶部的退出按钮退出

类似 on_quit: app.root.saveSession()

1 个答案:

答案 0 :(得分:2)

如果您希望您的应用程序在GUI关闭后直接运行,则最简单,最小的方法是将所有退出代码放在TestApp().run()之后。 run()创建了一个无限循环,该循环还清除了kivy中的所有事件数据,因此不会挂起。 window / gui实例死亡后,该无限循环就会中断。因此,之后的任何代码也将仅在GUI死后执行。

如果您想通过关闭套接字事件或弹出窗口询问用户是否确实是他们真正想做的事情来创建GUI的正常关闭方式,那么可以为on_request_close事件创建一个钩子:

from kivy.config import Config
Config.set('kivy', 'exit_on_escape', '0')

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.popup import Popup
from kivy.core.window import Window


class ChildApp(App):

    def build(self):
        Window.bind(on_request_close=self.on_request_close)
        return Label(text='Child')

    def on_request_close(self, *args):
        self.textpopup(title='Exit', text='Are you sure?')
        return True

    def textpopup(self, title='', text=''):
        """Open the pop-up with the name.

        :param title: title of the pop-up to open
        :type title: str
        :param text: main text of the pop-up to open
        :type text: str
        :rtype: None
        """
        box = BoxLayout(orientation='vertical')
        box.add_widget(Label(text=text))
        mybutton = Button(text='OK', size_hint=(1, 0.25))
        box.add_widget(mybutton)
        popup = Popup(title=title, content=box, size_hint=(None, None), size=(600, 300))
        mybutton.bind(on_release=self.stop)
        popup.open()


if __name__ == '__main__':
    ChildApp().run()

pythonic64致谢,他以gist的方式在何时创建了关于该主题的issue