GTK+ Си |
Поделиться |
Здравствуйте, гость ( Вход | Регистрация )
GTK+ Си |
Поделиться |
30.8.2014, 16:54
Сообщение
#1
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Предлагаю, выкладывать в этой теме примеры простейших программ и разную полезную информацию по GTK+.
Правда только если это будет кому-либо интересно на нашем форуме, например тема с Arduino у нас здесь заглохла . Поскольку плодить мертвые темы глупо, пишите если есть интерес, если интереса ни у кого не будет , тему просто удалим. PS А вообще у нас как-то тихо, что на Линуксе для всех , что здесь Сообщение отредактировал kostyalamer - 30.8.2014, 17:03 |
|
|
30.8.2014, 20:52
Сообщение
#2
|
|
Профессионал Группа: Глоб. Модератор Сообщений: 10033 Регистрация: 22.6.2009 Вставить ник Цитата Из: Онега Пользователь №: 1352 Страна: Россия Город: Не указан Пол: Муж. Репутация: 30 |
Так выкладывай что есть, а там видно будет
А лично мне Qt достаточно. GTK+ - для меня уже излишество А то, что тихо на форуме... это уже глубокий кризис, и у меня прямо сейчас нет идей насчёт оживления. -------------------- Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
|
|
|
30.8.2014, 21:57
Сообщение
#3
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Так выкладывай что есть, а там видно будет Ну ладно , полезные ссылки: http://habrahabr.ru/post/135809/ - для начала http://wiki.linuxformat.ru/wiki/LXF86:GTK%2B http://docstore.mik.ua/manuals/ru/gtk_plus/book1.html http://www.opennet.ru/docs/RUS/gtk_plus/ Для того что бы скомпилировать программу в altlinux на связке си и gtk+ надо дать команду : gcc -Wall -o имя_проги.c имя_проги `pkg-config --cflags --libs gtk+-2.0` ввиду хронической лени я забил в настройки Geany ( Сборка / Команды сборки ) : для компиляции : gcc -Wall -c "%f" `pkg-config --cflags --libs gtk+-2.0` для сборки : gcc -Wall -o "%e" "%f" `pkg-config --cflags --libs gtk+-2.0` и теперь обхожусь мышкокликаньем. В следующих постах подкину несколько простых шаблонов на основе которых достаточно бычтро можно написать свои программы вот простенький примерчик : Код # include <gtk/gtk.h> /* Подключаем библиотеку GTK+ */ # include <stdio.h> static int count = 0; int winx = 200; int winy = 200; void button_clicked(GtkWidget *button, gpointer data) // Обработчик нажатия кнопок { printf("%s pressed %d time(s) \n", (char *) data, ++count); } int main( int argc, char *argv[] ) { //GtkWidget *button; // Кнопка GtkWidget *button1; // Кнопка1 GtkWidget *button2; // Кнопка2 GtkWidget *button3; // Кнопка3 GtkWidget *button4; // Кнопка3 GtkWidget *window; // Главное окно GtkWidget *fixed; gtk_init( &argc, &argv ); // Инициализируем GTK+ window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); // Создаем главное окно gtk_window_set_title( GTK_WINDOW( window ),"Тест кнопок gtk"); gtk_window_set_default_size(GTK_WINDOW(window), winx, winy); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); fixed = gtk_fixed_new(); gtk_container_add(GTK_CONTAINER(window), fixed); button1= gtk_button_new_with_label ("Кнопка 1"); gtk_fixed_put(GTK_FIXED(fixed), button1, 0, 0); gtk_widget_set_size_request(button1, winx, 50); g_signal_connect( G_OBJECT( button1 ), "clicked",GTK_SIGNAL_FUNC(button_clicked), "Button 1"); button2= gtk_button_new_with_label ("Кнопка 2"); gtk_fixed_put(GTK_FIXED(fixed), button2, 0, 50); gtk_widget_set_size_request(button2, winx, 50); g_signal_connect( G_OBJECT( button2 ), "clicked",GTK_SIGNAL_FUNC(button_clicked), "Button 2"); button3= gtk_button_new_with_label ("Кнопка 3"); gtk_fixed_put(GTK_FIXED(fixed), button3, 0, 100); gtk_widget_set_size_request(button3, winx, 50); g_signal_connect( G_OBJECT( button3 ), "clicked",GTK_SIGNAL_FUNC(button_clicked), "Button 3"); button4= gtk_button_new_with_label ("Выход"); gtk_fixed_put(GTK_FIXED(fixed), button4, 0, 150); gtk_widget_set_size_request(button4, winx, 50); g_signal_connect( G_OBJECT( button4 ), "clicked",GTK_SIGNAL_FUNC(gtk_main_quit), "Button 4"); // Выход по нажатию кнопки g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL); // Выход по кресту на рамке gtk_widget_show_all(window); gtk_main(); return 0; } а вот как этот шаблон выглядит : shablon01.png ( 9.55 килобайт ) Кол-во скачиваний: 2 PS во всех шаблонах код мой только частично , все остальное взято из интернета |
|
|
31.8.2014, 23:13
Сообщение
#4
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Еще один шаблончик на ту же тему, на мой взгляд будет симпатичней, к тому же окошко тянется вместе с кнопками :
Код #include <gtk/gtk.h> int winx = 200; int winy = 200; int zazor =5; /* Новый обратный вызов. Данные переданные этой функции выводятся на stdout */ void callback( GtkWidget *widget, gpointer data ) { g_print ("Hello again - %s was pressed\n", (gchar *) data); } /* другой обратный вызов */ gint delete_event( GtkWidget *widget, GdkEvent *event, gpointer data ) { gtk_main_quit (); return FALSE; } int main( int argc, char *argv[] ) { /* Тип указателей на виджеты - GtkWidget */ GtkWidget *window; GtkWidget *button; GtkWidget *box1; /* Этот вызов присутствует во всех программах GTK. Разбираются аргументы командной строки и возвращаются программе */ gtk_init (&argc, &argv); /* Создаём основное окно программы */ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); /* Новый вызов который устанавливает заголовок * окна */ gtk_window_set_title (GTK_WINDOW (window), "Тест кнопок gtk2 "); gtk_window_set_default_size(GTK_WINDOW(window), winx, winy); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); /* Определяем обработчика сигналов delete_event * для выхода из GTK. */ g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (delete_event), NULL); /* Устанавливаем ширину окантовки окна программы */ gtk_container_set_border_width (GTK_CONTAINER (window), zazor*2); /* Создаём контейнер для упаковки виджетов. Реально контейнер не отображается, он используется как инструмент для размещения виджетов */ box1 = gtk_vbox_new (FALSE, zazor); /* Помещаем контейнер в основное окно. */ gtk_container_add (GTK_CONTAINER (window), box1); /* Создаём кнопку с надписью "Button 1". */ button = gtk_button_new_with_label ("Кнопка 1"); /* Размещаем кнопку "button 1" в качестве аргумента для функции обратного вызова, для того, чтобы вызывать эту функцию при нажатии на кнопку.*/ g_signal_connect (G_OBJECT (button), "clicked",G_CALLBACK (callback), (gpointer) "button 1"); /* Вместо gtk_container_add, мы упаковываем кнопку * в невидимый контейнер который был помещен в основное окно. */ gtk_box_pack_start (GTK_BOX(box1), button, TRUE, TRUE, 0); /* Обязательное действие для отображения сформированной кнопки */ //gtk_widget_show (button); /* Повторяем теже самые действия для создания второй кнопки */ button = gtk_button_new_with_label ("Кнопка 2"); g_signal_connect (G_OBJECT (button), "clicked",G_CALLBACK (callback), (gpointer) "button 2"); gtk_box_pack_start(GTK_BOX (box1), button, TRUE, TRUE, 0); /* Повторяем теже самые действия для создания третьей кнопки */ button = gtk_button_new_with_label ("Кнопка 3"); g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (callback), (gpointer) "button 3"); gtk_box_pack_start(GTK_BOX (box1), button, TRUE, TRUE, 0); /* Повторяем теже самые действия для создания кнопки выход*/ button = gtk_button_new_with_label ("Выход"); g_signal_connect( G_OBJECT( button), "clicked",GTK_SIGNAL_FUNC(gtk_main_quit), "button 4"); // Выход по нажатию кнопки gtk_box_pack_start(GTK_BOX (box1), button, TRUE, TRUE, 0); gtk_widget_show_all(window); /* Входим в gtk_main и ждем событий X сервера для начала выполнения действий! */ gtk_main (); return 0; } Выглядит эта радость так : shablon02.png ( 8.53 килобайт ) Кол-во скачиваний: 2 в качестве основы взят пример : http://www.opennet.ru/docs/RUS/gtk_plus/x363.html переделанный под вертикальный контейнер. |
|
|
7.9.2014, 21:07
Сообщение
#5
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Шаблон для программ с менюшками , по мотивам : http://welinux.ru/post/1754/
Код #include <gtk/gtk.h> int main( int argc, char *argv[]) { GtkWidget *window; GtkWidget *vbox; GtkWidget *menubar; GtkWidget *menu1; GtkWidget *m1; GtkWidget *menu2; GtkWidget *m2; GtkWidget *menu3; GtkWidget *m3; GtkWidget *quit; GtkWidget *m11,*m21, *m31, *m12,*m22,*m32; void menu_clicked(GtkWidget *m11, gpointer data) // Обработчик выбора пунктов меню { printf("Выбран пункт %s \n", (char *) data); } gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(window), 250, 200); gtk_window_set_title(GTK_WINDOW(window), "menu"); vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), vbox); menubar = gtk_menu_bar_new(); menu1= gtk_menu_new(); m1= gtk_menu_item_new_with_label("Меню_1"); m11 = gtk_menu_item_new_with_label("Меню1.1"); m12 = gtk_menu_item_new_with_label("Меню1.2"); quit = gtk_menu_item_new_with_label("Выход"); gtk_menu_item_set_submenu(GTK_MENU_ITEM(m1), menu1); gtk_menu_shell_append(GTK_MENU_SHELL(menu1), m11); gtk_menu_shell_append(GTK_MENU_SHELL(menu1), m12); gtk_menu_shell_append(GTK_MENU_SHELL(menu1), quit); gtk_menu_shell_append(GTK_MENU_SHELL(menubar), m1); gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 3); menu2 = gtk_menu_new(); m2 = gtk_menu_item_new_with_label("Меню_2"); m21 = gtk_menu_item_new_with_label("Меню_2.1"); m22 = gtk_menu_item_new_with_label("Меню_2.2"); gtk_menu_item_set_submenu(GTK_MENU_ITEM(m2), menu2); gtk_menu_shell_append(GTK_MENU_SHELL(menu2), m21); gtk_menu_shell_append(GTK_MENU_SHELL(menu2), m22); gtk_menu_shell_append(GTK_MENU_SHELL(menubar), m2); gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 3); menu3 = gtk_menu_new(); m3 = gtk_menu_item_new_with_label("Меню_3"); m31 = gtk_menu_item_new_with_label("Меню_3.1"); m32 = gtk_menu_item_new_with_label("Меню_3.2"); gtk_menu_item_set_submenu(GTK_MENU_ITEM(m3), menu3); gtk_menu_shell_append(GTK_MENU_SHELL(menu3), m31); gtk_menu_shell_append(GTK_MENU_SHELL(menu3), m32); gtk_menu_shell_append(GTK_MENU_SHELL(menubar), m3); gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 3); g_signal_connect_swapped(G_OBJECT(window), "destroy",G_CALLBACK(gtk_main_quit), NULL); g_signal_connect( G_OBJECT( m11 ), "activate",GTK_SIGNAL_FUNC(menu_clicked), "Меню1.1"); g_signal_connect( G_OBJECT( m12 ), "activate",GTK_SIGNAL_FUNC(menu_clicked), "Меню1.2"); g_signal_connect( G_OBJECT( m21 ), "activate",GTK_SIGNAL_FUNC(menu_clicked), "Меню2.1"); g_signal_connect( G_OBJECT( m22 ), "activate",GTK_SIGNAL_FUNC(menu_clicked), "Меню2.2"); g_signal_connect( G_OBJECT( m31 ), "activate",GTK_SIGNAL_FUNC(menu_clicked), "Меню3.1"); g_signal_connect( G_OBJECT( m32 ), "activate",GTK_SIGNAL_FUNC(menu_clicked), "Меню3.2"); g_signal_connect(G_OBJECT(quit), "activate",G_CALLBACK(gtk_main_quit), NULL); gtk_widget_show_all(window); gtk_main(); return 0; } Выглядит вот так: shablon03.png ( 12.27 килобайт ) Кол-во скачиваний: 3 PS на этом шаблоне я и закончу, все что нужно для написания простейших приложений на си и gtk здесь есть, а писать в пустоту не интересно Будут вопросы, отвечу в теме. PPS Клубу явно не хватает кодеров |
|
|
Текстовая версия | Сейчас: 24.4.2024, 14:50 | |