Простейшие примеры GTK

Это просто примеры с русскими комментариями.

Вывод сообщения:

#INCLUDE "gtk/gtk.bi"
gtk_init (0, 0) ' инициализация GTK
Dim MessBox As GtkWidget Ptr ' указатель на новый диалог
MessBox = gtk_message_dialog_new(0, GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK,"Hello")' создаем новый диалог
gtk_window_set_title(GTK_WINDOW(MessBox), g_locale_to_utf8("Сообщение",Len("Сообщение"),0,0,0))'заголовок для диалога
gtk_dialog_run(GTK_DIALOG(MessBox))'Запуск диалога
gtk_widget_destroy(MessBox) ' удаление диалога

Простое окно:

#INCLUDE "gtk/gtk.bi"

Dim As GtkWidget Ptr window_ 'указатель на объект-окно
Dim As String ST=*g_locale_to_utf8("Простое окно",Len("Простое окно"),0,0,0)' кодируем русские символы
gtk_init (0, 0) ' инициализация GTK
window_ = gtk_window_new (GTK_WINDOW_TOPLEVEL) ' создаем новое окно
gtk_window_set_title(GTK_WINDOW(window_),st ) 'Название в заголовке
gtk_window_set_default_size(GTK_WINDOW(window_), 300, 200)' ставим размер окна
gtk_window_set_position(GTK_WINDOW(window_), GTK_WIN_POS_CENTER)' окно по центру экрана
gtk_widget_show  (window_) ' отобразить окно
g_signal_connect(G_OBJECT(window_), "destroy", G_CALLBACK (@gtk_main_quit), 0)'сигнал завершения
gtk_main () 'вход в главный цикл


Замена цвета окна:

#INCLUDE "gtk/gtk.bi"

Dim As GtkWidget Ptr window_ 'указатель на объект-окно
Dim As GdkColor ncolor ' структура для цвета
Dim As String ST=*g_locale_to_utf8("Простое окно",Len("Простое окно"),0,0,0)' кодируем русские символы
gtk_init (0, 0) ' инициализация GTK
window_ = gtk_window_new (GTK_WINDOW_TOPLEVEL) ' создаем новое окно
gtk_window_set_title(GTK_WINDOW(window_),st ) 'Название в заголовке
gtk_window_set_default_size(GTK_WINDOW(window_), 300, 200)' ставим размер окна
gtk_window_set_position(GTK_WINDOW(window_), GTK_WIN_POS_CENTER)' окно по центру экрана
ncolor.red = &hffff 'Оттенок красного на полную
ncolor.blue = 0 'Оттенок синего не используем
ncolor.green = &hffff 'Оттенок зеленого на полную
gtk_widget_modify_bg(window_,GTK_STATE_NORMAL,@ncolor)
gtk_widget_show  (window_) ' отобразить окно
g_signal_connect(G_OBJECT(window_), "destroy", G_CALLBACK (@gtk_main_quit), 0)'сигнал завершения
gtk_main () 'вход в главный цикл


Окно с кнопкой и обработка ее события:

#INCLUDE "gtk/gtk.bi"

Declare Sub EVENTS_BUTTON()'объявление процедуры обработки события кнопки
Dim As GtkWidget Ptr window_ 'указатель на объект-окно
Dim As GtkWidget Ptr vbox ' указатель на контейнер
Dim As GtkWidget Ptr button1 ' указатель на кнопку
gtk_init (0, 0) ' инициализация GTK
window_ = gtk_window_new (GTK_WINDOW_TOPLEVEL) ' создаем новое окно
gtk_window_set_title(GTK_WINDOW(window_),"") 'Название в заголовке окна
gtk_window_set_default_size(window_, 100, 60)' ставим размер окна
gtk_window_set_position(GTK_WINDOW(window_), GTK_WIN_POS_CENTER)' окно по центру экрана
vbox = gtk_fixed_new() ' создаем неподвижный контейнер
gtk_container_add (GTK_CONTAINER(window_), vbox)' крепим контейнер к нашему окну
button1 = gtk_button_new_with_label(g_locale_to_utf8("Сделать BEEP",Len("Сделать BEEP"),0,0,0)) ' создаем кнопку
gtk_widget_set_size_request(button1, 90, 25)' размеры кнопки
gtk_fixed_put(GTK_FIXED(vbox), button1, 15, 10)' помещаем кнопку в контейнер
g_signal_connect(G_OBJECT(window_), "destroy", G_CALLBACK (@gtk_main_quit), 0)'сигнал завершения
g_signal_connect(G_OBJECT(button1), "clicked", G_CALLBACK (@EVENTS_BUTTON), window_) ' сигнал-событие для кнопки
gtk_widget_show_all (window_)' показываем окно и все в нем 
gtk_main () 'вход в главный цикл

'Процедура обработки события кнопки
Sub EVENTS_BUTTON()
    Beep()' проигрываем звук 
    gtk_main_quit () ' завершаем работу
End Sub

Цветной текстовый виджет:

#INCLUDE "gtk/gtk.bi"

Dim Shared As GtkWidget Ptr window_ 'указатель на объект-окно
Dim Shared As GtkWidget Ptr Label ' указатель на Label
Dim As GdkColor ncolor ' структура для цвета
gtk_init (0, 0) ' инициализация GTK
window_ = gtk_window_new (GTK_WINDOW_TOPLEVEL) ' создаем новое окно
gtk_window_set_title(GTK_WINDOW(window_),"") 'Название в заголовке окна
gtk_window_set_default_size(window_, 100, 60)' ставим размер окна
gtk_window_set_position(GTK_WINDOW(window_), GTK_WIN_POS_CENTER)' окно по центру экрана
Label= gtk_label_new(g_locale_to_utf8("Вывести сообщение",Len("Вывести сообщение"),0,0,0)) ' создаем Label
gtk_container_add (GTK_CONTAINER(window_),Label )' крепим Label к окну
g_signal_connect(G_OBJECT(window_), "destroy", G_CALLBACK (@gtk_main_quit), 0)'сигнал завершения
ncolor.red = 0 'Оттенок красного на полную
ncolor.blue = 0 'Оттенок синего не используем
ncolor.green = &hffff 'Оттенок зеленого на полную
gtk_widget_modify_fg(Label,GTK_STATE_NORMAL,@ncolor)
gtk_widget_show_all (window_)' показываем окно и все в нем
gtk_main () 'вход в главный цикл

Окно, текстовый виджет и его обработка:

#INCLUDE "gtk/gtk.bi"

Declare Sub EVENTS_BUTTON()'объявление процедуры обработки события Label
Dim Shared As GtkWidget Ptr window_ 'указатель на объект-окно
Dim As GtkWidget Ptr vbox ' указатель на контейнер
Dim Shared As GtkWidget Ptr Label ' указатель на Label
gtk_init (0, 0) ' инициализация GTK
window_ = gtk_window_new (GTK_WINDOW_TOPLEVEL) ' создаем новое окно
gtk_window_set_title(GTK_WINDOW(window_),"") 'Название в заголовке окна
gtk_window_set_default_size(GTK_WINDOW(window_), 100, 60)' ставим размер окна
gtk_window_set_position(GTK_WINDOW(window_), GTK_WIN_POS_CENTER)' окно по центру экрана
vbox = gtk_event_box_new () ' создаем контейнер, обеспечивающий событие для Label
gtk_container_add (GTK_CONTAINER(window_), vbox)' крепим контейнер к нашему окну
Label= gtk_label_new(g_locale_to_utf8("Вывести сообщение",Len("Вывести сообщение"),0,0,0)) ' создаем Label
gtk_container_add (GTK_CONTAINER(vbox),Label )' крепим Label к контейнеру
gtk_widget_set_events (vbox, GDK_BUTTON_PRESS_MASK)'Устанавливаем маску события (см. GdkEventMask) для виджета
g_signal_connect (G_OBJECT (vbox), "button_release_event",G_CALLBACK (@EVENTS_BUTTON()), 0) 'сигнал обработки Label
g_signal_connect(G_OBJECT(window_), "destroy", G_CALLBACK (@gtk_main_quit), 0)'сигнал завершения
gtk_widget_show_all (window_)' показываем окно и все в нем
gtk_main () 'вход в главный цикл

'Процедура обработки события Label
Sub EVENTS_BUTTON()
    Dim As String ST = *gtk_label_get_text(Cast(GtkLabel Ptr,Label)) ' получаем текст из Label
    Dim MessBox As GtkWidget Ptr ' указатель на новый диалог
    MessBox = gtk_message_dialog_new(GTK_WINDOW(window_), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK,ST)' создаем новый диалог
    gtk_window_set_title(GTK_WINDOW(MessBox), g_locale_to_utf8("Сообщение",Len("Сообщение"),0,0,0))'заголовок для диалога
    gtk_dialog_run(GTK_DIALOG(MessBox))'Запуск диалога
    gtk_widget_destroy(MessBox) ' удаление диалога
    gtk_label_set_text(Cast(GtkLabel Ptr,Label),"Hello") ' изменяем текст Label
End Sub

Пример Frame(Рамка):

#INCLUDE "gtk/gtk.bi"

Dim Shared As GtkWidget Ptr window_ 'указатель на объект-окно
Dim As GtkWidget Ptr frame ' указатель на контейнер
gtk_init (0, 0) ' инициализация GTK
window_ = gtk_window_new (GTK_WINDOW_TOPLEVEL) ' создаем новое окно
gtk_window_set_title(GTK_WINDOW(window_),"") 'Название в заголовке окна
gtk_window_set_default_size(Cast(GtkWindow Ptr, window_), 300, 300)' ставим размер окна
gtk_window_set_position(GTK_WINDOW(window_), GTK_WIN_POS_CENTER)' окно по центру экрана
gtk_container_set_border_width (GTK_CONTAINER (window_), 10)' отступы для контейнера окна.
frame = gtk_frame_new (0)' Создаём рамку 
gtk_container_add (GTK_CONTAINER (window_), frame) ' крепим рамку к окну
gtk_frame_set_label (GTK_FRAME (frame), "GTK Frame")'название для рамки
gtk_frame_set_label_align (GTK_FRAME (frame), 1.0, 0.3)'Выравнивание рамки по ширине и высоте
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_OUT)'стиль рамки
g_signal_connect(G_OBJECT(window_), "destroy", G_CALLBACK (@gtk_main_quit), 0)'сигнал завершения
gtk_widget_show_all (window_)' показываем окно и все в нем
gtk_main () 'вход в главный цикл


Пропорциональная рамка:

#INCLUDE "gtk/gtk.bi"

Dim Shared As GtkWidget Ptr window_ 'указатель на объект-окно
Dim As GtkWidget Ptr frame,drawing_area ' указатель на контейнер
gtk_init (0, 0) ' инициализация GTK
window_ = gtk_window_new (GTK_WINDOW_TOPLEVEL) ' создаем новое окно
gtk_window_set_title(GTK_WINDOW(window_),"") 'Название в заголовке окна
gtk_window_set_default_size(Cast(GtkWindow Ptr, window_), 300, 300)' ставим размер окна
gtk_window_set_position(GTK_WINDOW(window_), GTK_WIN_POS_CENTER)' окно по центру экрана
gtk_container_set_border_width (GTK_CONTAINER (window_), 10)' отступы для контейнера окна.
frame = gtk_aspect_frame_new ("2x1",0.5,0.5,2,0)' Создаём пропорциональную рамку 
gtk_container_add (GTK_CONTAINER (window_), frame) ' крепим рамку к окну
gtk_frame_set_label (GTK_FRAME (frame), "GTK Frame")'название для рамки
gtk_frame_set_label_align (GTK_FRAME (frame), 1.0, 0.3)'Выравнивание текста рамки по ширине и высоте
drawing_area = gtk_drawing_area_new () ' создаем дочерний виджет для рамки
gtk_container_add (GTK_CONTAINER (frame), drawing_area) ' закрепляем виджет в рамке
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_OUT)'стиль рамки
g_signal_connect(G_OBJECT(window_), "destroy", G_CALLBACK (@gtk_main_quit), 0)'сигнал завершения
gtk_widget_show_all (window_)' показываем окно и все в нем
gtk_main () 'вход в главный цикл


Окно с меню:

#INCLUDE "gtk/gtk.bi"
' если не объявлен null, объявляем его
#IF Not DEFINED(null) 
 #DEFINE Null 0
#ENDIF
'процедура обработки событий меню
Sub menuSub Cdecl(st As String Ptr )
    g_print (!"%s\n", st)
End Sub

    Dim As GtkWidget Ptr win ' хендл окна
    Dim As GtkWidget Ptr menu ' хендл меню
    Dim As GtkWidget Ptr menu_bar 'хендл новой панели меню
    Dim As GtkWidget Ptr root_menu ' корневое меню
    Dim As GtkWidget Ptr menu_items_1,menu_items_2 ' хендлы пунктов меню
    Dim As GtkWidget Ptr vbox ' контейнер для меню
    
    gtk_init (0,0) ' инициализация GTK
    win = gtk_window_new (GTK_WINDOW_TOPLEVEL)'новое окно
    gtk_window_set_default_size(GTK_WINDOW(win), 200, 100)'размеры окна 
    gtk_window_set_title (GTK_WINDOW (win), "GTK Menu Test")'заголовок окна
    g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK (@gtk_main_quit), 0)'сигнал завершения
    root_menu = gtk_menu_item_new_with_label ("Root Menu") 'создаем корневое меню   
    menu = gtk_menu_new ()' новое меню
    gtk_menu_item_set_submenu (GTK_MENU_ITEM (root_menu), menu)' крепим к корневому меню наше меню
    menu_items_1 = gtk_menu_item_new_with_label ("One")'создаем новый пункт меню
    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items_1)'крепим к меню
    g_signal_connect_swapped (G_OBJECT (menu_items_1), "activate", G_CALLBACK (@menuSub),@"One")' обработка события меню
    menu_items_2 = gtk_menu_item_new_with_label ("Two")'создаем новый пункт меню
    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items_2)'крепим к меню       
    g_signal_connect_swapped (G_OBJECT (menu_items_2), "activate", G_CALLBACK (@menuSub),@"Two")' обработка события меню
    gtk_widget_show (menu_items_1)' показываем 1 пункт
    gtk_widget_show (menu_items_2)' показываем 2 пункт
    gtk_widget_show (root_menu) ' показываем корневое меню
    vbox = gtk_vbox_new (FALSE, 0)' создаем новый контейнер для меню
    gtk_container_add (GTK_CONTAINER (win), vbox)'добавляем контейнер к окну
    gtk_widget_show (vbox) 'показываем контейнер
    menu_bar = gtk_menu_bar_new ()' создаем новую панель меню
    gtk_box_pack_start (GTK_BOX (vbox), menu_bar, 0, 0, 0) 'крепим к контейнеру нашу панель меню
    gtk_widget_show (menu_bar) ' показываем панель меню
    gtk_menu_shell_append (GTK_MENU_SHELL (menu_bar), root_menu) ' крепим к панели корневое меню
    gtk_widget_show (win) ' показываем окно
    
    gtk_main ()' вход в главный цикл

Окно с контекстным меню:

#INCLUDE "gtk/gtk.bi"
' если не объявлен null, объявляем его
#IF Not DEFINED(null)
#DEFINE Null 0
#ENDIF
Dim As GtkWidget Ptr win ' хендл окна
Dim Shared As GtkWidget Ptr menu ' хендл меню
Dim As GtkWidget Ptr menu_items_1,menu_items_2 ' хендлы пунктов меню
Dim As GtkWidget Ptr event_box ' контейнер событий для окна
'процедура обработки событий меню
Sub menuSub Cdecl(st As String Ptr )
    g_print (!"%s\n", st)
End Sub
'процедура вывода контекстного меню
Sub ContextmenuSub( )
    gtk_menu_popup(GTK_MENU (menu), 0, 0, 0, 0, 0, 0)
End Sub

gtk_init (0,0) ' инициализация GTK
win = gtk_window_new (GTK_WINDOW_TOPLEVEL)'новое окно
gtk_window_set_default_size(GTK_WINDOW(win), 200, 100)'размеры окна
gtk_window_set_title (GTK_WINDOW (win), "GTK Menu Test")'заголовок окна
event_box = gtk_event_box_new () 'создаем контейнер событий окна
gtk_container_add (GTK_CONTAINER (win), event_box) 'крепим его к окну
gtk_widget_show (event_box) ' показываем контейнер
g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK (@gtk_main_quit), 0)'сигнал завершения
menu = gtk_menu_new ()' новое меню
menu_items_1 = gtk_menu_item_new_with_label ("OneContextMenu")'создаем новый пункт меню
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items_1)'крепим к меню
g_signal_connect_swapped (G_OBJECT (menu_items_1), "activate", G_CALLBACK (@menuSub),@"OneContextMenu")' обработка события меню
menu_items_2 = gtk_menu_item_new_with_label ("TwoContextMenu")'создаем новый пункт меню
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items_2)'крепим к меню
g_signal_connect_swapped (G_OBJECT (menu_items_2), "activate", G_CALLBACK (@menuSub),@"TwoContextMenu")' обработка события меню
gtk_widget_show (menu_items_1)' показываем 1 пункт
gtk_widget_show (menu_items_2)' показываем 2 пункт
g_signal_connect (G_OBJECT (win), "button_press_event",G_CALLBACK (@ContextmenuSub()), 0) 'сигнал обработки вывода меню
gtk_widget_show (win) ' показываем окно
gtk_main ()' вход в главный цикл