GTK+ 2.0 Tutorial

<<< Previous

Разные виджеты (Miscellaneous Widgets)

Next >>>


Разные виджеты

Ярлыки

Ярлыки в GTK используются часто и они достаточно просты. Ярлыки не создают никаких сигналов ассоциированных с X window. Если вы хотите перехватить сигнал, то поместите ярлык в EventBox widget или Button widget.

Для создания нового ярлыка воспользуйтесь:

GtkWidget *gtk_label_new( const char *str ); GtkWidget *gtk_label_new_with_mnemonic( const char *str );

Единственным параметром является строка для отображения.

Для изменения текста ярлыка после создания, воспользуйтесь функцией:

void gtk_label_set_text( GtkLabel *label, const char *str );

Первый аргумент - предварительно созданный ярлык (приведение с использованием макрокоманды GTK_LABEL()), а второй - новая строка.

Пространство, необходимое для новой строки будет автоматически откорректировано если нужно. Вы можете использовать многострочные ярлыки, помещая в конец каждой строки знак перевода строки.

Для нахождения текущей строки, используйте:

const gchar* gtk_label_get_text( GtkLabel *label );

Не делайте пустой возвращённую строку, это внутреннее использование GTK.

Текст ярлыка выравнивается с помощью:

void gtk_label_set_justify( GtkLabel *label, GtkJustification jtype );

Значение jtype:

GTK_JUSTIFY_LEFT GTK_JUSTIFY_RIGHT GTK_JUSTIFY_CENTER (the default) GTK_JUSTIFY_FILL

Виджет ярлык может автоматически создавать оболочку для линии текста. Это активизируется так:

void gtk_label_set_line_wrap (GtkLabel *label, gboolean wrap);

Аргумент wrap принимает значение TRUE или FALSE.

Если вы хотите подчеркнуть ваш ярлык, то вы можете установить образец:

void gtk_label_set_pattern (GtkLabel *label, const gchar *pattern);

Аргумент pattern указывает как должно выглядеть подчеркивание. Оно может состоять из символов подчеркивания и пробелов. Каждый символ подчеркивается согласно образцу. Например, строка "__ __" подчеркнула бы первые два символа и последние.

Note

Если вы просто хотите иметь подчеркнутый акселератор ("мнемонический") в вашем ярлыке, вы должны использовать gtk_label_new_with_mnemonic () или gtk_label_set_text_with_mnemonic (), а не gtk_label_set_pattern ().

Ниже дан короткий пример для иллюстрации этих функций. Этот пример использует виджеты рамки для лучшего стиля оформления ярлыков. Сейчас вы можете проигнорировать их,  но позже к ним прийдется вернуться в секции Frame.

В GTK + 2.0, тексты ярлыков могут содержать разметку для шрифта и другие атрибуты изменения текста, а также текст ярлыка может быть выделен (для копирования и вставки). Эти расширенные особенности здесь объясняться не будут.

#include <gtk/gtk.h> int main( int argc, char *argv[] ) { static GtkWidget *window = NULL; GtkWidget *hbox; GtkWidget *vbox; GtkWidget *frame; GtkWidget *label; /* Инициализируем GTK */ gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL); gtk_window_set_title (GTK_WINDOW (window), "Label"); vbox = gtk_vbox_new (FALSE, 5); hbox = gtk_hbox_new (FALSE, 5); gtk_container_add (GTK_CONTAINER (window), hbox); gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (window), 5); frame = gtk_frame_new ("Обычный ярлык"); label = gtk_label_new ("Это обычный ярлык"); gtk_container_add (GTK_CONTAINER (frame), label); gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); frame = gtk_frame_new ("Многострочный ярлык"); label = gtk_label_new ("Это многострочный ярлык.\nВторая строка\n" \ "Третья строка"); gtk_container_add (GTK_CONTAINER (frame), label); gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); frame = gtk_frame_new ("Ярлык с левым выравниванием"); label = gtk_label_new ("Это многострочный\n" \ "ярлык с левым выравниванием.\nТретья линия"); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); gtk_container_add (GTK_CONTAINER (frame), label); gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); frame = gtk_frame_new ("Ярлык с правым выравниванием"); label = gtk_label_new ("Это многострочный ярлык\nс правым выравниванием.\n\n" \ "Четвёртая линия, (j/k)"); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT); gtk_container_add (GTK_CONTAINER (frame), label); gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); vbox = gtk_vbox_new (FALSE, 5); gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0); frame = gtk_frame_new ("Ярлык с обертыванием линии"); label = gtk_label_new ("Это пример ярлыка с обернутой линией(line-wrapped label). Это " \ "не должно повлиять на вывод " /*большой пробел, чтобы проверить интервал */\ "ширина распределяется автоматически" \ " слова обернуты чтобы соответствовать " \ "Пришло время для всех хороших людей занять " \ "свою сторону. " \ "Шесть больных овец шестого шейха\n" \ " Корректно поддерживаются многократные параграфы, " \ "и корректно добавляются "\ "дополнительные пробелы. "); gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); gtk_container_add (GTK_CONTAINER (frame), label); gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); frame = gtk_frame_new ("Заполненный, обернутый ярлык"); label = gtk_label_new ("Это пример line-wrapped, заполненного ярлыка. " \ "Эта строчка занимает "\ "всю ширину отведенную для неё. " \ "Это предложение доказывает "\ "мою особенность. Это другое предложение. "\ "Here comes the sun, do de do de do.\n"\ " Это новый параграф.\n"\ " Это еще один новый " \ "параграф . Всё заканчивается, "\ "к сожалению."); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_FILL); gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); gtk_container_add (GTK_CONTAINER (frame), label); gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); frame = gtk_frame_new ("Подчеркнутый ярлык"); label = gtk_label_new ("Эта строчка подчёркнута!\n" "Эта строчка подчёркнута прерывистым способом"); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); gtk_label_set_pattern (GTK_LABEL (label), "________________________ _ _____ ____ _ ____ __ __ __ _____ __"); gtk_container_add (GTK_CONTAINER (frame), label); gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); gtk_widget_show_all (window); gtk_main (); return 0; }

<<< Previous

Home

Next >>>

Example

 

Arrows