MessageDialog (Python) Marta Maria Casetti mmcasetti@gmail.com 2012 A message window Mario Blättermann mario.blaettermann@gmail.com 2011, 2013 MessageDialog

A message dialog which prints messages on the terminal, depending on your choices.

Code used to generate this example from gi.repository import Gtk from gi.repository import Gio import sys class MyWindow(Gtk.ApplicationWindow): # constructor for a window (the parent window) with a label def __init__(self, app): Gtk.Window.__init__(self, title="GMenu Example", application=app) self.set_default_size(400, 200) label = Gtk.Label() label.set_text("This application goes boom!") self.add(label) # create the message_action (a Gio.SimpleAction) - for the window message_action = Gio.SimpleAction.new("message", None) # connect the signal from the action to the function message_cb() message_action.connect("activate", self.message_cb) # add the action to the application app.add_action(message_action) # callback function for the signal "activate" from the message_action # in the menu of the parent window def message_cb(self, action, parameter): # a Gtk.MessageDialog messagedialog = Gtk.MessageDialog(parent=self, flags=Gtk.DialogFlags.MODAL, type=Gtk.MessageType.WARNING, buttons=Gtk.ButtonsType.OK_CANCEL, message_format="This action will cause the universe to stop existing.") # connect the response (of the button clicked) to the function # dialog_response() messagedialog.connect("response", self.dialog_response) # show the messagedialog messagedialog.show() def dialog_response(self, widget, response_id): # if the button clicked gives response OK (-5) if response_id == Gtk.ResponseType.OK: print("*boom*") # if the button clicked gives response CANCEL (-6) elif response_id == Gtk.ResponseType.CANCEL: print("good choice") # if the messagedialog is destroyed (by pressing ESC) elif response_id == Gtk.ResponseType.DELETE_EVENT: print("dialog closed or cancelled") # finally, destroy the messagedialog widget.destroy() class MyApplication(Gtk.Application): def __init__(self): Gtk.Application.__init__(self) def do_activate(self): win = MyWindow(self) win.show_all() def quit_cb(self, action, parameter): self.quit() def do_startup(self): Gtk.Application.do_startup(self) # create a menu (a Gio.Menu) menu = Gio.Menu() # append a menu item with label "Message" and action "app.message" menu.append("Message", "app.message") # append a menu item with label "Quit" and action "app.quit" menu.append("Quit", "app.quit") # set menu as the menu for the application self.set_app_menu(menu) # a new simpleaction - for the application quit_action = Gio.SimpleAction.new("quit", None) quit_action.connect("activate", self.quit_cb) self.add_action(quit_action) app = MyApplication() exit_status = app.run(sys.argv) sys.exit(exit_status)
Useful methods for a MessageDialog widget

In line 18 the signal "activate" is connected to the callback function message_cb() using widget.connect(signal, callback function). See for a more detailed explanation.

In the constructor of MessageDialog we could set flags as Gtk.DialogFlags.DESTROY_WITH_PARENT (to destroy the messagedialog window when its parent window is destroyed) or as Gtk.DialogFlags.MODAL (no interaction with other windows of the application).

In the constructor of MessageDialog we could set type as any of Gtk.MessageType.INFO, Gtk.MessageType.WARNING, Gtk.MessageType.QUESTION, Gtk.MessageType.ERROR, Gtk.MessageType.OTHER depending on what type of message we want.

In the constructor of MessageDialog we could set buttons as any of Gtk.ButtonsType.NONE, Gtk.ButtonsType.OK, Gtk.ButtonsType.CLOSE, Gtk.ButtonsType.CANCEL, Gtk.ButtonsType.YES_NO, Gtk.ButtonsType.OK_CANCEL, or any button using add_button() as in Gtk.Dialog.

We could substitute the default image of the MessageDialog with another image using

image = Gtk.Image() image.set_from_stock(Gtk.STOCK_CAPS_LOCK_WARNING, Gtk.IconSize.DIALOG) image.show() messagedialog.set_image(image)

where Gtk.STOCK_CAPS_LOCK_WARNING is any image from Stock Items. We could also set any image as in the Image widget, as image.set_from_file("filename.png").

format_secondary_text("some secondary message") sets a secondary message. The primary text becomes bold.

API-Referenzen

In this sample we used the following:

GtkMessageDialog

GtkDialog

GtkWindow

GSimpleAction

GActionMap

GMenu

GtkApplication