私はアプリケーションを終了しようとしたときに確認をユーザーに依頼しようとしています。しかし、私はどのようにユーザーがアプリを終了することができるすべてのさまざまな方法をキャッチするか分からない:ウィンドウには、Alt + F4、私は自分自身でAlt + Shift + Qを使用する 'X'ボタンがあります。GTK + 3:アプリケーション終了前に確認を依頼してください
これについてはどうすればいいですか?
私はアプリケーションを終了しようとしたときに確認をユーザーに依頼しようとしています。しかし、私はどのようにユーザーがアプリを終了することができるすべてのさまざまな方法をキャッチするか分からない:ウィンドウには、Alt + F4、私は自分自身でAlt + Shift + Qを使用する 'X'ボタンがあります。GTK + 3:アプリケーション終了前に確認を依頼してください
これについてはどうすればいいですか?
アプリケーションウィンドウで使用するGtk.Window
のdelete-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()
ありがとう!これを実装しようとします。 – joaquinlpereyra
あなたのメインクラスが 'class App(Gtk.Application)'型であるときはどうしますか? – Redsandro