2016-04-28 7 views
2

私はアプリケーションを終了しようとしたときに確認をユーザーに依頼しようとしています。しかし、私はどのようにユーザーがアプリを終了することができるすべてのさまざまな方法をキャッチするか分からない:ウィンドウには、Alt + F4、私は自分自身でAlt + Shift + Qを使用する 'X'ボタンがあります。GTK + 3:アプリケーション終了前に確認を依頼してください

これについてはどうすればいいですか?

答えて

3

アプリケーションウィンドウで使用するGtk.Windowdelete-eventに接続する必要があります。 delete-eventでは、確認ダイアログを表示することができます。ユーザーの応答に応じて、Trueを返すか、イベントを処理したことを意味し、シグナル伝播を停止する必要があります。または返信False - シグナル伝播を続行する必要があることを意味します。これにより、destroy()メソッドがウィジェットで呼び出されます。

delete-eventシグナルは、ウィンドウマネージャからの終了要求の応答として発行されます。例えば、ウィンドウメニューを使用しているとき。 Alt + F4のようなキーの組み合わせ。またはウィンドウの「閉じる」ボタンをクリックします。

上記を証明する簡単な例:そのような詳細な回答のため

import gi 
gi.require_version('Gtk', '3.0') 

from gi.repository import Gio 
from gi.repository import Gtk 

class AppWindow (Gtk.ApplicationWindow): 
    def __init__(self): 
     Gtk.ApplicationWindow.__init__(self) 
     self.set_default_size(200, 200) 

    # Override the default handler for the delete-event signal 
    def do_delete_event(self, event): 
     # Show our message dialog 
     d = Gtk.MessageDialog(transient_for=self, 
           modal=True, 
           buttons=Gtk.ButtonsType.OK_CANCEL) 
     d.props.text = 'Are you sure you want to quit?' 
     response = d.run() 
     d.destroy() 

     # We only terminate when the user presses the OK button 
     if response == Gtk.ResponseType.OK: 
      print('Terminating...') 
      return False 

     # Otherwise we keep the application open 
     return True 

def on_activate(app): 
    # Show the application window 
    win = AppWindow() 
    win.props.application = app 
    win.show() 

if __name__ == '__main__': 
    # Create an application instance 
    app = Gtk.Application(application_id='com.example.ExampleApp', flags=0) 

    # Use ::activate to show our application window 
    app.connect('activate', on_activate) 
    app.run() 
+0

ありがとう!これを実装しようとします。 – joaquinlpereyra

+0

あなたのメインクラスが 'class App(Gtk.Application)'型であるときはどうしますか? – Redsandro

関連する問題