
A dialog with the response signal connected to a callback function.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
from gi.repository import Gtk
import sys
class MyWindow(Gtk.ApplicationWindow):
# construct a window (the parent window)
def __init__(self, app):
Gtk.Window.__init__(self, title="GNOME Button", application=app)
self.set_default_size(250, 50)
# a button on the parent window
button = Gtk.Button("Click me")
# connect the signal "clicked" of the button with the function on_button_click()
button.connect("clicked", self.on_button_click)
# add the button to the window
self.add(button)
# callback function for the signal "clicked" of the button in the parent window
def on_button_click(self, widget):
# create a Gtk.Dialog
dialog = Gtk.Dialog()
dialog.set_title("A Gtk+ Dialog")
# The window defined in the constructor (self) is the parent of the dialog.
# Furthermore, the dialog is on top of the parent window
dialog.set_transient_for(self)
# set modal true: no interaction with other windows of the application
dialog.set_modal(True)
# add a button to the dialog window
dialog.add_button(button_text="OK", response_id=Gtk.ResponseType.OK)
# connect the "response" signal (the button has been clicked) to the function on_response()
dialog.connect("response", self.on_response)
# get the content area of the dialog, add a label to it
content_area = dialog.get_content_area()
label = Gtk.Label("This demonstrates a dialog with a label")
content_area.add(label)
# show the dialog
dialog.show_all()
def on_response(self, widget, response_id):
print "response_id is", response_id
# destroy the widget (the dialog) when the function on_response() is called
# (that is, when the button of the dialog has been clicked)
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)
In line 16 the signal "clicked" is connected to the callback function on_button_click() using widget.connect(signal, callback function). See Signals and callbacks for a more detailed explanation.
Instead of set_modal(True) we could have set_modal(False) followed by set_destroy_with_parent(True) that would destroy the dialog window if the main window is closed.
add_button(button_text="The Answer", response_id=42), where 42 is any integer, is an alternative to add_button(button_text="text", response_id=Gtk.ResponseType.RESPONSE), where RESPONSE could be one of OK, CANCEL, CLOSE, YES, NO, APPLY, HELP, which in turn correspond to the integers -5, -6,..., -11.
Got a comment? Spotted an error? Found the instructions unclear? Send feedback about this page.