В этой серии статей мы узнаем, как создавать программы графического пользовательского интерфейса (ГПИ) с помощью GTK.Я не знаю, насколько затянется эта серия. Чтобы понять эти статьи вам необходимы следующие знания о языке программирования C:
Эта кнопка выглядит как обычная кнопка но имеет два состояния: "нажата" или нет. Для создания кнопки toggle может быть использована одна из следующих функций:
GtkWidget *toggle=gtk_toggle_button_new(void); GtkWidget *toggle=gtk_toggle_button_new_with_label(const gchar *label);
Первая функция создает toggle кнопку без текстовой метки в то время как
вторая функция создает ее со строкой текста label в ней..
Вы можете задать состояние кнопки следующей функцией:
gtk_toggle_button_set_active (GtkToggleButton *toggle_button,
gboolean is_active);
где toggle_button это кнопка состояние которой хотите изменить и is_active желаемое состояние (0 или 1). Когда оно 0 - кнопка не в "нажатом" состоянии; когда же 1 то кнопка в "нажатом" состоянии..
Чтобы узнать состояние кнопки испльзуется следующая функция:
gboolean gtk_toggle_button_get_active(GtkToggleButton *button);
Событие "toggled" (изменение состояния) может быть привязано к кнопке "toggle".
Ниже приведен пример:
#include <gtk/gtk.h>
void togg(GtkWidget *widget, gpointer *data){
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data)))
g_print("State is 1\n");
else
g_print("State is 0\n");
}
int main( int argc,char *argv[] )
{
GtkWidget *window;
GtkWidget *button;
gtk_init (&argc, &argv);
/* Create a new window */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Toggle Button");
/* Connect destroy event to the window. */
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
/* Creates a toggle button */
button=gtk_toggle_button_new_with_label("I'm a toggle button");
/* Add the button to window */
gtk_container_add(GTK_CONTAINER(window),button);
/* Connect "toggled" event to the button */
gtk_signal_connect (GTK_OBJECT (button), "toggled",
GTK_SIGNAL_FUNC(togg),(gpointer *)button);
gtk_widget_show(button);
gtk_widget_show (window);
gtk_main ();
return(0);
}
Кнопка check (так же известная как check box) это подкласс кнопки toggle.
Она может быть
испльзована для выбора каких-либо вариантов.
Для создания кнопки check используется следующая функция:
GtkWidget* gtk_check_button_new (void); GtkWidget* gtk_check_button_new_with_label (const gchar *label);
Пояснения тут такие же как для кнопки toggle.
Пример:
#include <gtk/gtk.h>
void togg(GtkWidget *widget, gpointer *data){
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data)))
g_print("State is 1\n");
else
g_print("State is 0\n");
}
int main( int argc,char *argv[] )
{
GtkWidget *window;
GtkWidget *button;
gtk_init (&argc, &argv);
/* Create a new window */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Check Button");
/* Connect destroy event to the window. */
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
/* Creates a check button */
button=gtk_check_button_new_with_label("I'm a check button");
/* Add the button to window */
gtk_container_add(GTK_CONTAINER(window),button);
/* Connect "toggled" event to the button */
gtk_signal_connect (GTK_OBJECT (button), "toggled",
GTK_SIGNAL_FUNC(togg), (gpointer *)button);
gtk_widget_show(button);
gtk_widget_show (window);
gtk_main ();
return(0);
}
Метки позволяют Вам расположить любой текст в любом месте окна.
Для создания метки используйте следующую функцию:
GtkWidget* gtk_label_new(const gchar *text);
С функцией
gtk_label_set_text(GtkLabel *label, gchar *text);
Вы можете изменить текст на метке в любое время.
gtk_label_set_justify(GtkLabel *label, GtkJustification jtype);
Функция gtk_label_set_justify используется для выравнивания текста на метке. jtype может быть :
gtk_label_set_line_wrap (GtkLabel *label,gboolean wrap);
позволяет тексту быть разбитым на части для переноса на следующую строку если не вмещается на одной.Когда wrap равно 1 текст будет продолжен на следующую строку, в противном случае этого не произойдет.
gtk_label_get(GtkLabel *label, gchar **str)
используется чтобы поместить текст метки в переменную str.
ToolTip это текст-подсказка появляющийся когда курсор мышки находится над объектом.Например Вы можете задать текст-подсказку "послать информацию" для кнопки и этот текст появится когда мышка над ней.
Чтобы это сделать сначала нужно создать объект GtkToolTips:
GtkToolTips* gtk_tooltips_new();
и теперь для привязки текста-подсказки:
gtk_tooltips_set_tip(GtkTooltips *tooltips, GtkWidget *widget,
const gchar *tip_text,const gchar *tip_private);
Небольшой пример:
#include <gtk/gtk.h>
int main( int argc,char *argv[] )
{
GtkWidget *window;
GtkWidget *button;
GtkTooltips *tip;
gtk_init (&argc, &argv);
/* Create a new window */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Tooltips");
/* Connect destroy event to the window. */
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
/* Creates a button */
button=gtk_button_new_with_label("I'm a Button");
/* Add the button to window */
gtk_container_add(GTK_CONTAINER(window),button);
/* Creates a tooltips*/
tip=gtk_tooltips_new();
/* Attache this tooltips to button with text*/
gtk_tooltips_set_tip(tip, button, "Click me!",NULL);
gtk_widget_show(button);
gtk_widget_show (window);
gtk_main ();
return(0);
}
Еще несколько функций:
gtk_tooltips_enable (GtkTooltips *tooltips);
Активирует текст-подсказку.
gtk_tooltips_disable (GtkTooltips *tooltips);
Деактивирует текст-подсказку.
Чтобы получить любую информацию касающуюся текст-подсказкок объекта.
GtkTooltipsData* gtk_tooltips_get_data(GtkWidget *widget);
GtkTooltipsData это структура следующего вида:
struct _GtkTooltipsData
{
GtkTooltips *tooltips;
GtkWidget *widget;
gchar *tip_text;
gchar *tip_private;
GdkFont *font;
gint width;
GList *row;
};
Чтобы определить время появления текст-подсказки:
gtk_tooltips_set_delay (GtkTooltips *tip, guint delay)
Combo Box это объект-окно объединенный с выпадающим списком в котором можно редактировать текст.
Он может быть создан с помощью:
GtkWidget *gtk_combo_new();
и нам нужен список возможных вариантов задаваемый с помощью структуры GList:
GList *glist=NULL;
сами возможные варинты для выбора вносятся в список так:
GList *g_list_append(GList *list, gchar *option);
Далее созданный список должен быть добавлен в Combo Box:
gtk_combo_set_popdown_strings(GtkCombo *combo, GList *List);
Теперь Combo Box готов.Прочитать выбранный вариант можно используя:
gchar *gtk_entry_get_text(GtkEntry *entry);
entry это GTK_ENTRY(GTK_COMBO(combo)->entry)) в этом случае.
gtk_combo_set_use_arrows(GtkCombo *combo,gint val);
Эта функция используется чтобы активировать\деактивировать клавиши вверх\вниз на клавиатуре используемые для изменения значения в Combo Box. Когда val равно 0 эти клавиши не функционируют и наоборот в противоположном случае. Но когда значение в Combo Box отлично от значений находящихся в списке эти клавиши не функционируют..
gtk_combo_set_use_arrows_always(GtkCombo *combo,gint val);
Эта функция аналогична gtk_combo_set_use_arrows но когда значение в Combo Box отлично от значений находящихся в списке эти клавиши функционируют..
gtk_combo_set_value_in_list(GtkCombo *combo, gboolean val,
gboolean ok_if_empty);
Когда val равно 1 Вы можете ввести значение из списка.Когда ok_if_empty равно 1 значение может быть пустым (отсутствовать). .
#include <gtk/gtk.h>
void act(GtkWidget *widget, gpointer *data){
g_print((gchar *)data);
}
int main( int argc,char *argv[] ) {
GtkWidget *window;
GtkWidget *combo;
GtkWidget *button;
GtkWidget *box;
GList *list=NULL;
list=g_list_append(list,"Slackware");
list=g_list_append(list,"RedHat");
list=g_list_append(list,"SuSE");
gtk_init (&argc, &argv);
/* Create a new window */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Combo Box");
/* Connect destroy event to the window. */
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
/* Create a new horizontal box */
box=gtk_hbox_new(1,0);
gtk_container_add(GTK_CONTAINER(window),box);
/* Creates a combo box */
combo=gtk_combo_new();
/* Sets the list */
gtk_combo_set_popdown_strings(GTK_COMBO(combo),list);
/* Enables up/down keys change the value. */
gtk_combo_set_use_arrows_always(GTK_COMBO(combo),1);
gtk_box_pack_start(GTK_BOX(box), combo,1,1,1);
button=gtk_button_new_with_label("Write it");
gtk_signal_connect(GTK_OBJECT(button),"clicked",GTK_SIGNAL_FUNC(act),
gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(combo)->entry)));
gtk_box_pack_start(GTK_BOX(box), button,1,1,1);
gtk_widget_show(box);
gtk_widget_show(combo);
gtk_widget_show(button);
gtk_widget_show (window);
gtk_main ();
return(0);
}
Любые замечания и комментарии принимаются.