Dialogové okno reagující na signál napojený na funkci zpětného volání.
from gi.repository import Gtk
import sys
class MyWindow(Gtk.ApplicationWindow):
# Sestaví okno (rodičovské okno)
def __init__(self, app):
Gtk.Window.__init__(self, title="GNOME Button", application=app)
self.set_default_size(250, 50)
# Tlačítko v rodičovském okně
button = Gtk.Button("Click me")
# Napojí signál "clicked" tlačítka na funkci on_button_click()
button.connect("clicked", self.on_button_click)
# Přidá tlačítko do okna
self.add(button)
# Funkce zpětného volání pro signál "clicked" tlačítka v rodičovském
# okně
def on_button_click(self, widget):
# Vytvoří Gtk.Dialog
dialog = Gtk.Dialog()
dialog.set_title("A Gtk+ Dialog")
# Okno definované v konstruktoru (self) je rodičem dialogového okna
# Navíc, dialogové okno je nad rodičovským oknem
dialog.set_transient_for(self)
# Nastaví modal true: nelze pracovat s ostaními okny této aplikace
dialog.set_modal(True)
# Přidá tlačítko do dialogového okna
dialog.add_button(button_text="OK", response_id=Gtk.ResponseType.OK)
# Napojí signál "response" (bylo kliknuto na tlačítko) na funkci
# on_response()
dialog.connect("response", self.on_response)
# Získá oblast s obsahem dialogového okna, přidá do ní popisek
content_area = dialog.get_content_area()
label = Gtk.Label("This demonstrates a dialog with a label")
content_area.add(label)
# Zobrazí dialogové okno
dialog.show_all()
def on_response(self, widget, response_id):
print("response_id is", response_id)
# Zlikviduje widget (dialogové okno), když je zavolána funkce on_response()
# (což je, když bylo kliknuto na tlačítko v dialogovém okně)
widget.destroy()
class MyApplication(Gtk.Application):
def __init__(self):
Gtk.Application.__init__(self)
def do_activate(self):
win = MyWindow(self)
win.show_all()
def do_startup(self):
Gtk.Application.do_startup(self)
app = MyApplication()
exit_status = app.run(sys.argv)
sys.exit(exit_status)
Na řádku 16 je signál "clicked"
napojen na funkci zpětného volání on_button_click()
pomocí widget.connect(signál, funkce zpětného volání)
. Podrobnější vysvětlení viz .
Místo set_modal(True)
bychom mohli mít set_modal(False)
následované set_destroy_with_parent(True)
, což by zlikvidovalo dialogové okno, když by se zavřelo hlavní okno.
add_button(button_text="The Answer", response_id=42)
, kde 42
je libovolné celé číslo, je alternativou k add_button(button_text="text", response_id=Gtk.ResponseType.RESPONSE)
, kde RESPONSE
by bylo jedno z OK, CANCEL, CLOSE, YES, NO, APPLY, HELP
, což zase odpovídá celým číslům -5, -6, …, -11
.
V této ukázce se používá následující:
GtkDialog
GtkWindow