問題描述
我想在用戶嘗試退出應用程序時運行一個方法,有點像您確定要退出"或您要保存文件"類型的消息,只要用戶嘗試退出點擊窗口頂部的退出按鈕退出
I would like to run a Method when the user tries to exit the app , kind of like a "are you sure you want to exit" or "Do you want to save the file" type of message whenever the user tries to exit by clicking the Exit button on top of the window
類似的東西on_quit: app.root.saveSession()
推薦答案
如果您希望您的應用程序在 GUI 關閉后簡單地運行,最簡單和最小的方法是在 TestApp().run()
.run()
創建了一個無限循環,它還會清除 kivy 中的任何事件數據,因此它不會掛起.一旦窗口/gui 實例死亡,那個無限循環就會中斷.因此,之后的任何代碼都只會在 GUI 死掉之后才會執行.
If you want your application to simply run things after the GUI has closed, the easiest and smallest approach would be to place any exit code after TestApp().run()
. run()
creates a endless loop which also clears any event-data from within kivy so it doesn't hang. That endless loop breaks as soon as the window/gui instance dies. So there for, any code after will execute only after the GUI dies too.
如果您想創建一個優雅的 GUI 關閉,例如套接字關閉事件或彈出窗口詢問用戶是否真的想要這樣做,那么為 on_request_close 事件創建一個鉤子是要走的路:
If you want to create a graceful shutdown of the GUI with for instance socket-closing events or a popup asking the user if that's what they really want to do, then creating a hook for the on_request_close event is the way to go:
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="noreferrer">gist 回到 issue 時的主題.
Courtesy of pythonic64 who created a gist on the topic in a issue way back when.
這篇關于如何在 kivy 應用程序退出時運行方法的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!