The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа

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






Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру