MessageDialog (Python) Marta Maria Casetti mmcasetti@gmail.com 2012 Une fenêtre de message Luc Rebert, traduc@rebert.name 2011 Alain Lojewski, allomervan@gmail.com 2011-2012 Luc Pionchon pionchon.luc@gmail.com 2011 Bruno Brouard annoa.b@gmail.com 2011-12 Luis Menina liberforce@freeside.fr 2014 Boîte de dialogue de message

Une boîte de dialogue qui affiche les messages sur le terminal en fonction de vos choix.

Code utilisé pour générer cet exemple 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)
Méthodes utiles pour un élément graphique BoiteDeDialogueDemessage

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.

Dans le constructeur de BoiteDeDialogueDemessage, nous pouvons définir les drapeaux à Gtk.DialogFlags.DESTROY_WITH_PARENT (pour la détruire si sa fenêtre parente est détruite), ou à Gtk.DialogFlags.MODAL (aucune interaction avec les autres fenêtres de l'application).

Dans le constructeur de BoiteDeDialogueDemessage, nous pouvons définir le type à Gtk.MessageType.INFO, Gtk.MessageType.WARNING, Gtk.MessageType.QUESTION, Gtk.MessageType.ERROR, Gtk.MessageType.OTHER en fonction du type de message voulu.

Dans le constructeur de BoiteDeDialogueDemessage, nous pouvons définir les boutons à Gtk.ButtonsType.NONE, Gtk.ButtonsType.OK, Gtk.ButtonsType.CLOSE, Gtk.ButtonsType.CANCEL, Gtk.ButtonsType.YES_NO, Gtk.ButtonsType.OK_CANCEL, ou n'importe quel bouton utilisant add_button() comme dans Gtk.Dialog.

Nous pouvons substituer l'image par défaut de la BoiteDeDialogueDemessage par une autre avec

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").

La méthode format_secondary_text(« messagesecondaire ») définit un message secondaire. Le texte principal se met en gras.

Références API

Dans cet exemple, les éléments suivants sont utilisés :

GtkMessageDialog

GtkDialog

GtkWindow

GSimpleAction

GActionMap

GMenu

GtkApplication