Εργαλειοθήκη (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 Εργαλειοθήκη

Παράδειγμα εργαλειοθήκης με κουμπιά (από εικονίδια παρακαταθήκης).

Ο χρησιμοποιούμενος κώδικας για παραγωγή αυτού παραδείγματος from gi.repository import Gtk from gi.repository import Gdk from gi.repository import Gio import sys class MyWindow(Gtk.ApplicationWindow): def __init__(self, app): Gtk.Window.__init__(self, title="Toolbar Example", application=app) self.set_default_size(400, 200) # a grid to attach the toolbar grid = Gtk.Grid() # a toolbar created in the method create_toolbar (see below) toolbar = self.create_toolbar() # with extra horizontal space toolbar.set_hexpand(True) # show the toolbar toolbar.show() # attach the toolbar to the grid grid.attach(toolbar, 0, 0, 1, 1) # add the grid to the window self.add(grid) # create the actions that control the window and connect their signal to a # callback method (see below): # undo undo_action = Gio.SimpleAction.new("undo", None) undo_action.connect("activate", self.undo_callback) self.add_action(undo_action) # fullscreen fullscreen_action = Gio.SimpleAction.new("fullscreen", None) fullscreen_action.connect("activate", self.fullscreen_callback) self.add_action(fullscreen_action) # a method to create the toolbar def create_toolbar(self): # a toolbar toolbar = Gtk.Toolbar() # which is the primary toolbar of the application toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR) # create a button for the "new" action, with a stock image new_button = Gtk.ToolButton.new_from_stock(Gtk.STOCK_NEW) # label is shown new_button.set_is_important(True) # insert the button at position in the toolbar toolbar.insert(new_button, 0) # show the button new_button.show() # set the name of the action associated with the button. # The action controls the application (app) new_button.set_action_name("app.new") # button for the "open" action open_button = Gtk.ToolButton.new_from_stock(Gtk.STOCK_OPEN) open_button.set_is_important(True) toolbar.insert(open_button, 1) open_button.show() open_button.set_action_name("app.open") # button for the "undo" action undo_button = Gtk.ToolButton.new_from_stock(Gtk.STOCK_UNDO) undo_button.set_is_important(True) toolbar.insert(undo_button, 2) undo_button.show() undo_button.set_action_name("win.undo") # button for the "fullscreen/leave fullscreen" action self.fullscreen_button = Gtk.ToolButton.new_from_stock( Gtk.STOCK_FULLSCREEN) self.fullscreen_button.set_is_important(True) toolbar.insert(self.fullscreen_button, 3) self.fullscreen_button.set_action_name("win.fullscreen") # return the complete toolbar return toolbar # callback method for undo def undo_callback(self, action, parameter): print("You clicked \"Undo\".") # callback method for fullscreen / leave fullscreen def fullscreen_callback(self, action, parameter): # check if the state is the same as Gdk.WindowState.FULLSCREEN, which # is a bit flag is_fullscreen = self.get_window().get_state( ) & Gdk.WindowState.FULLSCREEN != 0 if not is_fullscreen: self.fullscreen_button.set_stock_id(Gtk.STOCK_LEAVE_FULLSCREEN) self.fullscreen() else: self.fullscreen_button.set_stock_id(Gtk.STOCK_FULLSCREEN) self.unfullscreen() 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) # create the actions that control the window and connect their signal to a # callback method (see below): # new new_action = Gio.SimpleAction.new("new", None) new_action.connect("activate", self.new_callback) app.add_action(new_action) # open open_action = Gio.SimpleAction.new("open", None) open_action.connect("activate", self.open_callback) app.add_action(open_action) # callback method for new def new_callback(self, action, parameter): print("You clicked \"New\".") # callback method for open def open_callback(self, action, parameter): print("You clicked \"Open\".") app = MyApplication() exit_status = app.run(sys.argv) sys.exit(exit_status)
Χρήσιμες μέθοδοι για ένα γραφικό στοιχείο εργαλειοθήκης

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

Χρησιμοποιήστε insert(tool_item, position) για την εισαγωγή του tool_item στη position. Εάν η position είναι αρνητική, το στοιχείο προσαρτάται στο τέλος της εργαλειοθήκης.

Η get_item_index(tool_item) ανακτά τη θέση του tool_item στην εργαλειοθήκη.

Η get_n_items() επιστρέφει τον αριθμό των στοιχείων της εργαλειοθήκης· η get_nth_item(position) επιστρέφει το στοιχείο στη θέση position.

Εάν η εργαλειοθήκη δεν έχει χώρο για όλα τα στοιχεία μενού και τον set_show_arrow(True), τα στοιχεία που δεν έχουν χώρο εμφανίζονται μέσα από ένα μενού υπερχείλισης.

Ο set_icon_size(icon_size) ρυθμίζει το μέγεθος των εικονιδίων στην εργαλειοθήκη· το icon_size can be one of Gtk.IconSize.INVALID, Gtk.IconSize.MENU, Gtk.IconSize.SMALL_TOOLBAR, Gtk.IconSize.LARGE_TOOLBAR, Gtk.IconSize.BUTTON, Gtk.IconSize.DND, Gtk.IconSize.DIALOG. Αυτό πρέπει να χρησιμοποιηθεί μόνο για εργαλειοθήκες ειδικού σκοπού, εργαλειοθήκες κανονικής εφαρμογής πρέπει να σέβονται τις προτιμήσεις του χρήστη για το μέγεθος των εικονιδίων. Η unset_icon_size() αναιρεί τις προτιμήσεις που ρυθμίστηκαν με unset_icon_size(), έτσι ώστε οι προτιμήσεις χρήστη να χρησιμοποιηθούν για τον προσδιορισμό του μεγέθους του εικονιδίου.

Ο set_style(style), όπου style είναι ένα από τα Gtk.ToolbarStyle.ICONS, Gtk.ToolbarStyle.TEXT, Gtk.ToolbarStyle.BOTH, Gtk.ToolbarStyle.BOTH_HORIZ, ρυθμίζει εάν η εργαλειοθήκη εμφανίζει μόνο εικονίδια, μόνο κείμενο ή και τα δύο (στοιβαγμένα κάθετα ή δίπλα μεταξύ τους). Για να επιτρέψετε στις προτιμήσεις του χρήστη να καθορίσουν το ύφος της εργαλειοθήκης και να αναιρέσετε ένα ύφος εργαλειοθήκης που ρυθμίστηκε έτσι, χρησιμοποιήστε unset_style().

Αναφορές API

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

GtkToolbar

GtkToolButton

GtkToolItem

Stock Items

GtkActionable

GtkWidget

Δομή γεγονότων