рдЬреАрдЯреАрдХреЗ рдХрд╛ рдкрд░рд┐рдЪрдп

HabraHabr рдореЗрдВ рдЖрдЦрд╝рд┐рд░рдХрд╛рд░ GTK рдХреЛ рд╕рдорд░реНрдкрд┐рдд рдПрдХ рдирдпрд╛ рдмреНрд▓реЙрдЧ рдерд╛ред рдЕрдм рд╕рдореНрдорд┐рд▓рд┐рдд рд╣реЛрдВ! :-)

рд╣рд╛рдп% рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо%!

рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рднрдпрд╛рдирдХ рдЕрдлрд╡рд╛рд╣реЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдмрд░рд╛рдмреНрд░ рдкрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рде, рдореИрдВ рдкреНрд░рдЪрд▓рд┐рдд рд░реВрдврд╝рд┐рдпреЛрдВ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред

рдЬреАрдЯреАрдХреЗ + рдПрдХ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ (рдЬреАрдпреВрдЖрдИ) рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рд╣реИред рдХреНрдпреВрдЯреА рдХреЗ рд╕рд╛рде, рдпрд╣ рдЖрдЬ рдПрдХреНрд╕ рд╡рд┐рдВрдбреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рджреЛ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред

рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреАрдЖрдИрдПрдордкреА рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд╕рдВрдкрд╛рджрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛ рдЧрдпрд╛ рдФрд░ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рд╣рд╛рд╕рд┐рд▓ рдХреАред GTK + GNU LGPL рдХреА рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд рд╡рд┐рддрд░рд┐рдд рдореБрдлреНрдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╣реИ рдФрд░ рдпрд╣ рдореБрдлреНрдд рдФрд░ рдорд╛рд▓рд┐рдХрд╛рдирд╛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рджреЛрдиреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред



рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ


GTK + рдХреЛ C рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрдб рд╣реИред рдЖрдк рдирд┐рдореНрди рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд░реИрдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: Ada, C, C ++, C #, D, Erlang, Fortran, GOB, Genie, Haskell, FreeBASIC, Free Pascal, Java, JavaScript, Lua, OCaml, Perl, PHP, PureBasic, Python, R , рд░реВрдмреА, рд╕реНрдорд╛рд▓рдЯрд╛рдХ, рдЯреАрд╕реАрдПрд▓, рд╡рд╛рд▓рд╛ред

рдЬреАрдЯреАрдХреЗ + рдХреЗ рдЕрдВрджрд░ рджреЛ рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВ: рдЬреАрдЯреАрдХреЗ, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдЬреЗрдЯреНрд╕ (рдмрдЯрди, рд▓реЗрдмрд▓, рдЖрджрд┐) рдФрд░ рдЬреАрдбреАрдХреЗ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╡реНрдпрд╕реНрдд рд╣реЛрддрд╛ рд╣реИред

рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдФрд░ / рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреЗрд╢реА рджрд┐рдЦрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдкрд░ рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рддрд░рд╣ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдВрд╕реНрдХрд░рдг 3.0 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, рдЖрдк CSS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддрддреНрд╡реЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

"рд╣реИрд▓реЛ, рд╡рд░реНрд▓реНрдб" рдмрдирд╛рдирд╛


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдирд┐рдореНрди рдЖрдзрд╛рд░ рдХреЛ рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдВ:

#include <gtk/gtk.h> /*  GTK+ */ /*      */ int main( int argc, char *argv[]) { /*     */ /*  GTK+ */ gtk_init(&argc, &argv); /*      */ /*   GTK+ */ gtk_main(); return 0; } 

рдХреГрдкрдпрд╛ рдореЗрд░реА рддрд░рд╣ рдПрдХрд▓ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ (//) рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рдореИрдВрдиреЗ рд╕реА рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рдЖрдЗрдП рдкрд╣рд▓реЗ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдВрдбреЛ рдмрдирд╛рдПрдВред рдЬреАрдЯреАрдХреЗ рдореЗрдВ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреА рдЦрд┐рдбрд╝рдХрд┐рдпрд╛рдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдПрдХ рдирд┐рдпрдорд┐рдд GtkWindow рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рд╣рдорд╛рд░реЗ рд░рд┐рдХреНрдд рдореЗрдВ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ:

  /*   ,         */ GtkWidget *window; /* ... */ /*    -  */ window = gtk_window_new(GTK_WINDOW_TOPLEVEL); /*    */ gtk_window_set_title(GTK_WINDOW(window), "  GTK"); /*    ( ) */ gtk_container_set_border_width (GTK_CONTAINER(window), 50); 

рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрджред

GTK + рдореЗрдВ, рдпрд╣ рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рдирд╣реАрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдерд╛рдЧрдд рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд╢реЗрд╖ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдкреИрдХ рдХрд░реЗрдВред рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╡рд┐рдВрдбреЛ рднреА рдПрдХ рдХрдВрдЯреЗрдирд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рдЬреЗрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдпрдерд╛, рд╣рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдЬреЗрдЯ рдХрдВрдЯреЗрдирд░ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдПрдХ рдЧреНрд░рд┐рдб, рд╕рд╛рде рд╣реА рдХреНрд╖реИрддрд┐рдЬ рдпрд╛ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдХреНрд╖реЗрддреНрд░ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдЧрд▓реЗ рд╡рд┐рд╖рдп рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред

рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╡рд┐рдВрдбреЛ рдкрд░ рд░реБрдХреЗрдВред рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рдПрдХ рдЦрд┐рдбрд╝рдХреА рдПрдХ рдХрдВрдЯреЗрдирд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдордиреЗ 50 рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рд╕реАрдорд╛ рдореЛрдЯрд╛рдИ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреА рд╣реИред рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?



рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрджреГрд╢реНрдп рдлреНрд░реЗрдо рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдм рд╕рдВрдХреЗрддреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рд╣рдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдирд╛ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рдЕрдкрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╡рд┐рдЬреЗрдЯ рдХреЗ рд╕рд╛рде рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

  /*    ,     */ g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL); 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдорд╛рдирдХ рдлрд╝рдВрдХреНрд╢рди gtk_main_quit() , рдЬреЛ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдЧрд╛ред

рдЕрдм рдПрдХ рдмрдЯрди рдмрдирд╛рдПрдВ, рдЬрд┐рд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдПрдХ рд╢рд┐рд▓рд╛рд▓реЗрдЦ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ "рдФрд░ рдЖрдкрдХреЛ рдирдорд╕реНрдХрд╛рд░,% рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо%!"ред

рдмрдЯрди (GtkButton) рднреА рдПрдХ рдХрдВрдЯреЗрдирд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╡рд┐рдЬреЗрдЯ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдмрд▓ рдмрдирд╛рдХрд░ рдФрд░ рдЙрд╕реЗ рдПрдХ рдмрдЯрди рдореЗрдВ рд░рдЦрдХрд░ рдХреЛрдб рдХреЛ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд░реЗрдВ:

  /*   ,         */ GtkWidget *button; /* ... */ /*     */ button = gtk_button_new_with_label(", !"); /*      */ gtk_container_add(GTK_CONTAINER(window), button); /*     ,   - welcome */ g_signal_connect(GTK_BUTTON(button), "clicked", G_CALLBACK(welcome), NULL); 

рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:



рдЕрдм welcome рд╕рдорд╛рд░реЛрд╣ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:

 /*   */ void welcome (GtkButton *button, gpointer data) { /*  */ GtkWidget *dialog; GtkWidget *label; GtkWidget *content_area; /*   */ dialog = gtk_dialog_new_with_buttons(" LOL!!!111", NULL, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); /*  ,      */ content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); /*   */ label = gtk_label_new("\n\n  , %username!%"); gtk_container_add(GTK_CONTAINER(content_area), label); gtk_widget_show(label); /*   */ gtk_dialog_run(GTK_DIALOG(dialog)); /*    */ gtk_widget_destroy(dialog); } 


рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкрд░рд┐рдгрд╛рдо:



рдЗрддрдиреА рдЬрд▓реНрджреА рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рдордиреЗ рдПрдХ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрдирд╛рдпрд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╖рдпреЛрдВ рдореЗрдВ рдореИрдВ рдЧреНрд▓реЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ (рдмрд┐рдирд╛ рдХреЛрдб рдХреЗ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо) рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред

рд╕рдВрдХрд▓рди


 gcc file_name.c -o file_name `pkg-config --cflags --libs gtk+-3.0` 

рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП GTK рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВ ("-рджреЗрд╡" рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ)ред

рдФрд░ рдХреБрдЫ?


рд╣рд╛рдВ, рдореИрдВ рдЖрдкрдХреЛ рдХреБрдЫ рд▓рд┐рдВрдХ рджреВрдВрдЧрд╛:

www.gtk.org - рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдЗрдЯ

www.gtkforums.com - рдЕрдВрдЧреНрд░реЗрдЬреА-рднрд╛рд╖рд╛ GTK рдлреЛрд░рдо

developer.gnome.org - GNOME рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рддрд╣рдд рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реАред рдЗрд╕рдореЗрдВ рд░реВрд╕реА рдореЗрдВ рдЬреАрдЯреАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реИред

UPD: рдкреВрд░реНрдг рдкреЗрд╕реНрдЯрдмрд┐рди рдЙрджрд╛рд╣рд░рдг рдХреЛрдб - pastebin.com/iPttWBne

Source: https://habr.com/ru/post/In135809/


All Articles