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

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