Gtk.Box
Ας αρχίσουμε με τα Gtk.Box. Όπως όλα τα containers ένα Gtk.Box είναι αόρατο για τον χρήστη αλλά μπορείτε να το φανταστείτε ως ένα οριζόντιο ή κάθετο κουτί που του προσθέτετε αντικείμενα.
Για να δημιουργήσουμε ένα Gtk.Box γράφουμε το εξής:
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
box = Gtk.Box()
Από προεπιλογή το Gtk.Box που θα δημιουργηθεί θα είναι οριζόντιο, άμα θέλουμε να είναι κάθετο πρέπει να το περάσουμε ως όρισμα το
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
Μπορούμε επίσης να περάσουμε ως όρισμα το homogeneous (True/False) δηλαδή αν θέλουμε όλα τα widgets που περιέχει το Gtk.Box να έχουν το ίδιο μέγεθος και το spacing (int) για το πόση απόσταση θα απέχουν μεταξύ τους.
Σε ένα Gtk.Box μπορούμε να προσθέσουμε με δύο τρόπους κάποιο widgets, από τα αριστερά προς τα δεξιά με το box.pack_start() και από τα δεξιά προς τα αριστερά με το box.pack_end().
Και τα δύο παίρνουν ακριβώς τις ίδιες παραμέτρους που είναι:
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
pack_start(child, expand, fill, padding)
όπου child: το widgets που θέλουμε να προσθέσουμε
expand: αν θέλουμε να επεκταθεί στον διαθέσιμο χώρο (True/False)
fill: αν θέλουμε να καλύψει όλο το χώρο του container (True/False)
padding: πόσο θέλουμε να απέχει από άλλα widgets (προσθέτετε επιπλέον στο spacing)
Τώρα ας δούμε ένα παράδειγμα
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
#!/usr/bin/python3
from gi.repository import Gtk
class MyWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Hello World")
self.box = Gtk.Box(spacing=6)
self.add(self.box)
self.button1 = Gtk.Button(label="Hello")
self.button1.connect("clicked", self.on_button1_clicked)
self.box.pack_start(self.button1, True, True, 0)
self.button2 = Gtk.Button(label="Goodbye")
self.button2.connect("clicked", self.on_button2_clicked)
self.box.pack_start(self.button2, True, True, 0)
def on_button1_clicked(self, widget):
print "Hello"
def on_button2_clicked(self, widget):
print "Goodbye"
win = MyWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()
Gtk.Grid
Όπως και το Gtk.Box το Gtk.Grid είναι αόρατο για τον χρήστη αλλά μπορείτε να το φανταστείτε σαν πλέγμα. To Gtk.Grid μπορεί κάλλιστα να χρησιμοποιηθεί και ως Gtk.Box. Το Gtk.Grid δεν παίρνει καμία παράμετρο και μπορείτε να το δημιουργήσετε ως εξής:
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
grid = Gtk.Grid()
Για να προσθέσετε κάποιο widget σε ένα Gtk.Grid μπορείτε να χρησιμοποιήσετε κάποια από τους παρακάτω τρεις τρόπους:
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
grid.attach(child, left, top, width, height)
grid.attach_next_to(child, sibling, side, width, height)
grid.add(widget)
Η τελευταία προσθέτει το widget στην κατεύθυνση ανάλογα με το orientation που έχουμε ορίσει.
Η πρώτη προσθέτει το widget στην θέση που καθορίζεται από το κελί στα αριστερά του (left), πάνω του (top) αλλά και το μέγεθος του (width, height), ενώ η δεύτερη το προσθέτει στην θέση που καθορίζεται από το γειτονικό του widget (sibling) και την πλευρά με την οποία γειτονεύει (side) αλλά και το μέγεθος του ξανά. Η πλευρά μπορεί να πάρει τις εξής τιμές:
[*] Gtk.PositionType.LEFT
[*] Gtk.PositionType.RIGHT
[*] Gtk.PositionType.TOP
[*] Gtk.PositionType.BOTTOM
Για να καταλάβετε καλύτερα κοιτάξτε το παράδειγμα παρακάτω και αν δυσκολεύεστε ακόμα πείτε μου να ανεβάσω και άλλο.
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
#!/usr/bin/python3
from gi.repository import Gtk
class GridWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Grid Example")
grid = Gtk.Grid()
self.add(grid)
button1 = Gtk.Button(label="Button 1")
button2 = Gtk.Button(label="Button 2")
button3 = Gtk.Button(label="Button 3")
button4 = Gtk.Button(label="Button 4")
button5 = Gtk.Button(label="Button 5")
button6 = Gtk.Button(label="Button 6")
grid.add(button1)
grid.attach(button2, 1, 0, 2, 1)
grid.attach_next_to(button3, button1, Gtk.PositionType.BOTTOM, 1, 2)
grid.attach_next_to(button4, button3, Gtk.PositionType.RIGHT, 2, 1)
grid.attach(button5, 1, 2, 1, 1)
grid.attach_next_to(button6, button5, Gtk.PositionType.RIGHT, 1, 1)
win = GridWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()