Γραφικά με GTK+

...το μέρος για να ξεκινήσετε!

Συντονιστής: adem1

Κανόνες Δ. Συζήτησης
Παρακαλώ να επιλέξετε, με προσοχή, την άδεια που θέλετε να έχουν οι οδηγοί που συγγράφετε.
Πληροφορίες για τις άδειες μπορείτε να βρείτε εδώ.
Άμα επιθυμείτε κάποια άλλη άδεια επικοινωνήστε με κάποιο Διαχειριστή είτε Συντονιστή.

Σημαντικό είναι να χρησιμοποιήσετε την υπηρεσία http://imagebin.ubuntu-gr.org για τις εικόνες.

Re: Γραφικά με GTK+

Δημοσίευσηαπό giannosfor » 16 Δεκ 2011, 16:30

Προσθήκη κουμπιού στην εφαρμογή μας.

Αν κοιτάξουμε την ιεραρχία που ακολουθεί το παράθυρο θα δούμε ότι προέρχεται απο ένα container.
Δηλαδή κληρονομεί τις ιδιότητες του,αυτό σημαίνει ότι μπορεί να περιέχει κουμπιά,κείμενο ή και άλλους υποδοχείς.Αν θελήσουμε να βάλουμε ένα κουμπί στην εφαρμογή μας θα πρέπει να το προσθέσουμε στο container του παραθύρου.Αυτό γίνεται με μία συνάρτηση,θα πρέπει πρώτα όμως να το δηλώσουμε και έπειτα να το αρχικοποιήσουμε.
Κώδικας: Επιλογή όλων
GtkWidget * button;

Κώδικας: Επιλογή όλων
button = gtk_button_new();

Στην επόμενη συνάρτηση προσθέτουμε το κουμπί στον υποδοχέα του παραθύρου.

Κώδικας: Επιλογή όλων
gtk_container_add (GTK_CONTAINER (window), button);

Σαν πρώτη παράμετρο η συνάρτηση δέχεται ένα container,για να περάσουμε το container του παράθυρου μας χρησιμοποιούμε μία μακροεντολή.

Επίσης θα πρέπει το παράθυρο μας να έχει διαστάσεις.

Κώδικας: Επιλογή όλων
gtk_window_set_default_size(GTK_WINDOW(window), 250, 250);

Η διαδικασία που ακολουθούμε λέγεται type casting.Δίνοντας στην μακροεντολή ένα αντικείμενο αυτή μας επιστρέφει ένα δείκτη στη δομή που ζητάμε.

Αν θέλουμε να αλλάξουμε τον τίτλο.

Κώδικας: Επιλογή όλων
gtk_window_set_title(GTK_WINDOW(window),"Ubuntu");

Αλλιώς το παράθυρο παίρνει το όνομα του προγράμματος.

Αν θέλουμε να αλλάξουμε το όνομα του κουμπιού μας.

Κώδικας: Επιλογή όλων
gtk_button_set_label(GTK_BUTTON(button),"Ubuntu button");


gtk_widget_show(window);
Κώδικας: Επιλογή όλων
gtk_widget_show_all(window);
Θα μας εμφανίσει το παράθυρο με τα περιεχόμενα.

Το πρόγραμμα
Κώδικας: Επιλογή όλων
#include <gtk/gtk.h>

int main( int   argc,
          char *argv[] )
{
    GtkWidget *window,*button;
   
    gtk_init (&argc, &argv);
   
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

    button = gtk_button_new();

    gtk_container_add (GTK_CONTAINER (window), button);

    gtk_window_set_default_size(GTK_WINDOW(window), 250, 250);

    gtk_window_set_title(GTK_WINDOW(window),"Ubuntu");

    gtk_button_set_label(GTK_BUTTON(button),"Ubuntu button");

    g_signal_connect (window, "destroy",G_CALLBACK (gtk_main_quit), NULL);

    gtk_widget_show_all(window); 

    gtk_main ();
   
    return 0;
}
1 Γνώσεις Linux: Καθόλου ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 12.04 precise 3.2.0-58-generic 32bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.2.0-57-generic, Microsoft Windows XP Professional
3 Intel Core2 Duo CPU E4600 2.40GHz ‖ RAM 2012 MiB ‖ ASUS INC. P5Q - � P5Q
4 nVidia G94 [GeForce 9600 GT] [10de:0622] {nvidia}
5 eth0: Qualcomm Atheros AR8121/AR8113/AR8114 Gigabit or Fast Ethernet [1969:1026] (rev b0) ⋮ wlan0: 148f:3070 Ralink Technology, Corp. RT2870/RT3070 Wireless Adapter
Άβαταρ μέλους
giannosfor
punkTUX
punkTUX
 
Δημοσιεύσεις: 297
Εγγραφή: 24 Απρ 2011, 20:24
Τοποθεσία: Ηράκλειο
Εκτύπωση

Re: Γραφικά με GTK+

Δημοσίευσηαπό xmarkx » 27 Αύγ 2014, 16:01

Ωραίος οδηγός και κατανοητός. Μπράβο και στα δυο παιδιά για την υπομονή. Θέλω να ρωτήσω κάτι και δεν ξέρω αν γίνεται. Αν υποθέσουμε πως έχω ένα απλό παράθυρο και θέλω να του αφαιρέσω το πλαισιο. Δηλαδή την γραμμή κάτω-δεξία-αριστρά και το πάνελ πάνω πάνω με τα κουμπιά close-minimize-maximize. Επίσης θέλω να προσθέσω transparency στο background. Αυτό πως θα μπορούσα να το κανω; Κυρίως είναι αφικτό με αυτή τη βιβλιοθήκη η όχι; Αν οχι, οι δυνατότητες της είναι παρόμοιες με την swinh (κάπως έτσι λέγεται) στην γλώσσα Java?
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 14.04 trusty 3.13.0-35-generic 64bit (en_US.UTF-8, X-Cinnamon cinnamon), Ubuntu 3.13.0-34-generic, Windows 7
3 Intel Core i5-4670K CPU @ 3.40GHz ‖ RAM 7923 MiB ‖ ASUS Z87-A - ASUS All Series
4 Advanced Micro Devices, Inc. [AMD/ATI] Cape Verde XT [Radeon HD 7770/8760 / R7 250X] [1002:683d] {fglrx_pci}
5 eth0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 11)
Άβαταρ μέλους
xmarkx
babeTUX
babeTUX
 
Δημοσιεύσεις: 96
Εγγραφή: 19 Αύγ 2014, 17:31
Εκτύπωση

Προηγούμενη

Επιστροφή στο Οδηγοί - How to - Tutorials

cron