Θέμα του οδηγού αυτού είναι τα γραφικά με τη χρήση της βιβλιοθήκης GTK+. Ο επίσημος οδηγός στα αγγλικά βρίσκεται εδώ: http://library.gnome.org/devel/gtk-tutorial/stable/ Τα παραδείγματα που χρησιμοποιώ βρίσκονται και στον αρχικό οδηγό. Παρ'όλ' αυτά δεν πρόκειται για μετάφραση μιας και ο μεταφραστής είναι προδότης (traduttore traditore ) αλλά για έναν καινουριο οδηγό.
Η GTK+ είναι μια βιβλιοθήκη που ξεκίνησε από το πρόγραμμα GIMP και εξελίχθηκε σε αυτόνομη βιβλιοθήκη. Παρέχει τις βασικές λειτουργίες για γραφικά, GUI, συμβάντα, κ.α.
Προαπαιτούμενα
Για τη χρήση της βιβλιοθήκης θα χρειαστεί να εγκαταστήσουμε μερικά πακέτα, τα build-essential, gtk+-2.0, pkg-config. To build-essential μας δίνει το GNU C μεταγλωττιστή, τo εργαλείo make κ.α., το gtk+-2.0 είναι η βιβλιοθήκη, και το pkg-config είναι ένα βοηθητικό πρόγραμμα που διαχειρίζεται τις παραμέτρους για το gcc. Aνοίγουμε το τερματικό και πληκτρολογούμε:
- Κώδικας: Επιλογή όλων
sudo apt-get install build-essential gtk+-2.0 pkg-config
Φυσικά ως προαπαιτούμενο είναι και ο οδηγός viewtopic.php?f=9&t=55 για μεταγλώττιση πηγαίου κώδικα.
Καλημέρα, κόσμε
Στον παρών οδηγό θα ασχοληθούμε με c, αλλά υπάρχουν και διεπιφάνειες και για άλλες γλώσσες προγραμματισμού. Ανοίγουμε ένα αρχείο bla.c και γράφουμε μέσα τον παρακάτω κώδικα:
- Κώδικας: Επιλογή όλων
#include <gtk/gtk.h>
int main( int argc,
char *argv[] )
{
GtkWidget *window;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_show (window);
gtk_main ();
return 0;
}
Το αποθηκεύουμε και έπειτα το μεταγλωττίζουμε με την εντολή:
- Κώδικας: Επιλογή όλων
gcc bla.c -o bla `pkg-config --cflags --libs gtk+-2.0`
Προσοχή παραπάνω είναι ` και όχι ', αυτό σημαίνει αντικατάσταση του αποτελέσματος της εντολής pkg-config --cflags --libs gtk+-2.0, την οποία αν εκτελέσουμε μόνη της θα δούμε μια λίστα από διαδρομές, αρχεία, βιβλιοθήκες τα οποία είναι παράμετροι για το gcc. Φυσικά αν ξέρουμε τι κάνουμε αυτές τις παραμέτρους μπορούμε να τις τροποποιήσουμε με το χέρι.
Τρέχοντας το πρόγραμμα:
- Κώδικας: Επιλογή όλων
./bla
θα δούμε ένα παράθυρο που δεν έχει τη δυνατότητα τερματισμού εκτός από το ctrl+c.
H πρώτη γραμμή λέει στο πρόγραμμά μας ποια αρχεία να συμπεριλάβει. Η διαδρομή των αρχείων καθορίζεται από την εντολή pkg-config --cflags --libs gtk+-2.0. Μετά από τον απαραίτητο ορισμό του κυρίως προγράμματος main χρειαζόμαστε την κλήση της συνάρτησης gtk_init. Σε όλα τα προγράμματα αυτή η κλήση είναι απαραίτητη εκτός κι αν ξέρουμε τι κάνουμε. Όλες τις παραμέτρους από τη γραμμή εντολών που έχουν να κάνουν με τη gtk τις αφαιρεί από τη λίστα των παραμέτρων και τις υπόλοιπες μπορεί ο χρήστης να τις χρησιμοποιήσει όπως θέλει.
Στην gtk σχεδόν όλα είναι GtkWidgets. Έτσι και το παράθυρό μας είναι ένας δείκτης τύπου GtkWidget (GtkWidget *window). Αυτός είναι ο ορισμός του αλλά το παράθυρο δημιουργείται για πρώτη φορά στη γραμμή:
- Κώδικας: Επιλογή όλων
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
Δημιουργείται όμως στη μνήμη, τίποτε δε φαίνεται ακόμη στην οθόνη. Η εντολή που το προβάλλει είναι η:
- Κώδικας: Επιλογή όλων
gtk_widget_show (window);
Αλλά πάλι δε συμβαίνει τίποτε. Αρχίζουμε και βλέπουμε πράματα όταν ο κώδικάς μας μπει στο βρόγχο gtk_main (), ο οποίος είναι και ο κύριος βρόγχος του προγράμματός μας. Μετά από αυτή την εντολή τίποτε δε συμβαίνει.
Pygtk
Και ύστερα από την παραπάνω προτροπή ακολουθεί σε python. Η python είναι μια γλώσσα προγραμματισμού που δε χρειάζεται να μεταγλωττιστεί (interpreted και όχι compiled, ας με βοηθήσει κάποιος με την ελληνική ορολογία) Σε αυτή την περίπτωση θα χρειαστούμε επιπλέον το πακέτο pygtk.
Ανοίγουμε το τερματικό και πληκτρολογούμε python και μας περιμένει το γνωστό
>>>
Εδώ πληκτρολογούμε
- Κώδικας: Επιλογή όλων
>>>import pygtk
>>>import gtk
κι έτσι έχουμε εισάγει τις βιβλιοθήκες που χρειαζόμαστε. Μιας και στην python δε χρειάζεται να δηλώσουμε μεταβλητές απλώς δημιουργουμε το παράθυρό μας με
- Κώδικας: Επιλογή όλων
>>>window = gtk.Window(gtk.WINDOW_TOPLEVEL)
και το προβάλουμε με
- Κώδικας: Επιλογή όλων
>>> window.show()
Προφανώς ακόμη δεν εμφανίστηκε τίποτε στην οθόνη γιατί δε φτάσουμε στο κυρίως βρόγχο. Αυτό γίνεται με
- Κώδικας: Επιλογή όλων
>>>gtk.main_level()
Και πάλι το πρόγραμμά μας δεν έχει δυνατότητα τερματισμού εκτός από ctrl+c. Η δυνατότητα τερματισμού πραγματοποιείται με σύνδεση του συμβάντος με την αντίστοιχη εντολή.
Η εργασία υπάγεται στην άδεια Creative Commons Αναφορά-Παρόμοια διανομή 3.0 Ελλάδα