# MenuButton

Tiffany Antopolski
tiffany.antopolski@gmail.com 2012
Marta Maria Casetti
mmcasetti@gmail.com 2012
Ένα γραφικό συστατικό που εμφανίζει ένα μενού όταν πατηθεί
Δημήτρης Σπίγγος
dmtrs32@gmail.com 2012, 2013

# MenuButton

Το γραφικό συστατικό GtkMenuButton χρησιμοποιείται για την εμφάνιση ενός μενού όταν πατιέται. Αυτό το μενού μπορεί να δοθεί είτε ως GtkMenu, ή ως ένα αποσπασμένο GMenuModel. Το γραφικό συστατικό GtkMenuButton μπορεί να κρατήσει οποιοδήποτε θυγατρικό γραφικό συστατικό. Δηλαδή, μπορεί να κρατήσει σχεδόν κάθε άλλο τυπικό GtkWidget. Το πιο συχνά χρησιμοποιούμενο θυγατρικό είναι το παρεχόμενο GtkArrow.

Χρειάζεται να τρέξετε το GNOME 3.6 για να δουλέψει το MenuButton.

# Ο χρησιμοποιούμενος κώδικας για παραγωγή αυτού παραδείγματος

from gi.repository import Gtk from gi.repository import Gio import sys

class MyWindow(Gtk.ApplicationWindow):

def __init__(self, app): Gtk.Window.__init__(self, title="Menubutton Example", application=app) self.set_default_size(600, 400)

grid = Gtk.Grid()

# a menubutton menubutton = Gtk.MenuButton() menubutton.set_size_request(80, 35)

grid.attach(menubutton, 0, 0, 1, 1)

# a menu with two actions menumodel = Gio.Menu() menumodel.append("New", "app.new") menumodel.append("About", "win.about")

# a submenu with one action for the menu submenu = Gio.Menu() submenu.append("Quit", "app.quit") menumodel.append_submenu("Other", submenu)

# the menu is set as the menu of the menubutton menubutton.set_menu_model(menumodel)

# the action related to the window (about) about_action = Gio.SimpleAction.new("about", None) about_action.connect("activate", self.about_callback) self.add_action(about_action)

self.add(grid)

# callback for "about" def about_callback(self, action, parameter): print "You clicked \"About\""

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)

# the actions related to the application new_action = Gio.SimpleAction.new("new", None) new_action.connect("activate", self.new_callback) self.add_action(new_action)

quit_action = Gio.SimpleAction.new("quit", None) quit_action.connect("activate", self.quit_callback) self.add_action(quit_action)

# callback functions for the actions related to the application def new_callback(self, action, parameter): print "You clicked \"New\""

def quit_callback(self, action, parameter): print "You clicked \"Quit\"" self.quit()

app = MyApplication() exit_status = app.run(sys.argv) sys.exit(exit_status)

# Χρήσιμες μέθοδοι για ένα γραφικό συστατικό MenuButton

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

Η τοποθέτηση ενός μενού καθορίζεται από την ιδιότητα "direction" του κουμπιού μενού και τις ιδιότητες του μενού "halign" ή "valign". Για παράδειγμα, όταν η κατεύθυνση είναι `Gtk.ArrowType.DOWN` (άλλη επιλογή: `UP`) και η οριζόντια στοίχιση είναι `Gtk.Align.START` (άλλες επιλογές: `CENTER` και `END`), το μενού θα τοποθετηθεί κάτω από το κουμπί, με το αρχικό άκρο (ανάλογα με την κατεύθυνση του κειμένου) του μενού στοιχισμένο με το αρχικό άκρο του κουμπιού. Εάν δεν υπάρχει αρκετός χώρος κάτω από το κουμπί, το μενού αναδύεται πάνω από το κουμπί. Εάν η στοίχιση μπορεί να μετακινήσει μέρος του μενού εκτός οθόνης, είναι 'pushed in'.

Στην περίπτωση μιας κάθετης στοίχισης, οι δυνατές κατευθύνσεις είναι `LEFT` και `RIGHT` και η κάθετη στοίχιση είναι ξανά `START`, `CENTER` ή `END`.

Οι `set_align_widget(alignment)` and `set_direction(direction)` μπορούν να χρησιμοποιηθούν για να οριστούν αυτές οι ιδιότητες.

# Αναφορές API

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

MenuButton