MessageDialog (Python) Marta Maria Casetti mmcasetti@gmail.com 2012 Ένα παράθυρο μηνύματος Ελληνική μεταφραστική ομάδα GNOME team@gnome.gr 2012-2015 Δημήτρης Σπίγγος dmtrs32@gmail.com 2012, 2013 Μαρία Θουκιδίδου marablack3@gmail.com 2014 Θάνος Τρυφωνίδης tomtryf@gmail.com 2014, 2015 MessageDialog

Ένας διάλογος μηνύματος που τυπώνει μηνύματα στο τερματικό, ανάλογα με τις επιλογές σας.

Ο χρησιμοποιούμενος κώδικας για παραγωγή αυτού παραδείγματος 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)
Χρήσιμες μέθοδοι για ένα γραφικό στοιχείο MessageDialog

Στη γραμμή 18 το σήμα "activate" συνδέεται με τη συνάρτηση επανάκλησης message_cb() χρησιμοποιώντας widget.connect(signal, callback function). Δείτε για μια πιο λεπτομερή εξήγηση.

Στον κατασκευαστή του MessageDialog μπορούμε να ορίσουμε σημαίες ως Gtk.DialogFlags.DESTROY_WITH_PARENT (για καταστροφή του παραθύρου διαλόγου μηνύματος όταν το ανιόν παράθυρο καταστράφηκε) ή ως Gtk.DialogFlags.MODAL (χωρίς αλληλεπίδραση με άλλα παράθυρα της εφαρμογής).

Στον κατασκευαστή του MessageDialog μπορούμε να ορίσουμε ως τύπο οποιοδήποτε από τα Gtk.MessageType.INFO, Gtk.MessageType.WARNING, Gtk.MessageType.QUESTION, Gtk.MessageType.ERROR, Gtk.MessageType.OTHER ανάλογα με τι τύπο μηνύματος θέλουμε.

Στον κατασκευαστή του MessageDialog μπορούμε να ορίσουμε κουμπιά οποιαδήποτε από τα Gtk.ButtonsType.NONE, Gtk.ButtonsType.OK, Gtk.ButtonsType.CLOSE, Gtk.ButtonsType.CANCEL, Gtk.ButtonsType.YES_NO, Gtk.ButtonsType.OK_CANCEL, ή οποιοδήποτε κουμπί χρησιμοποιώντας το add_button() όπως στον Gtk.Dialog.

Μπορούμε να αντικαταστήσουμε την προεπιλεγμένη εικόνα του MessageDialog με άλλη εικόνα χρησιμοποιώντας

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

όπου Gtk.STOCK_CAPS_LOCK_WARNING είναι οποιαδήποτε εικόνα από στοιχεία αποθέματος. Μπορούμε επίσης να ορίσουμε οποιαδήποτε εικόνα όπως στο γραφικό στοιχείο της εικόνας, ως image.set_from_file("filename.png").

Το format_secondary_text("some secondary message") ορίζει ένα δευτερεύον μήνυμα. Το πρωτεύον κείμενο γίνεται έντονο.

Αναφορές API

Σε αυτό το παράδειγμα χρησιμοποιήσαμε τα παρακάτω:

GtkMessageDialog

GtkDialog

GtkWindow

GSimpleAction

GActionMap

GMenu

GtkApplication