Разнообразные виджеты

9.1. Метка (gtk.Label)

Метки часто используются в GTK, и они относительно простые. Метки не излучают сигналов и они не связаны с X Window. Если вам нужно отлавливать сигналы, или делать вырезки, помещайте их в виджет EventBox, (см. Раздел 10.1, “Виджет EventBox”), или кнопку (см. Раздел 6.1, “Обычные кнопки”).

Для того чтобы создать метку, используйте:

  label = gtk.Label(str)

Единственный аргумент это строка, которую вы хотите отображать. Для того чтобы изменить текст метки, используйте метод:

  label.set_text(str)

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

Чтобы получить текущую строку, используйте:

  str = label.get_text()

label это созданная вами метка, и str это возвращаемая строка. Текст метки может быть выровнен используя:

  label.set_justify(jtype)

Значения для jtype:

  JUSTIFY_LEFT # the default
  JUSTIFY_RIGHT
  JUSTIFY_CENTER
  JUSTIFY_FILL # does not work

Виджет label, также способен делать перенос длинных строк автоматически. Это может быть активировано использованием:

  label.set_line_wrap(wrap)

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

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

  label.set_pattern(pattern)

Аргумент pattern показывает как должно выглядеть подчёркивание. Он содержит строку с символами подчёркивания и побела. Подчёркивание означает что соответствующий символ в метке должен быть подчёркнут. Например строка “__ __” подчеркнёт первые два символа, четвёртый и пятый. Если вы просто хотите иметь подчёркнутую горячую клавишу (“Мнемоническую команду”) в вашей метке, вы должны использовать set_text_with_mnemonic(str), вместо set_pattern().

Программа label.py это короткий пример иллюстрирующий эти методы. Этот пример использует виджет Frame (см. Раздел 10.5, “Рамки”), для лучшей демонстрации стилей меток. Пока вы можете игнорировать это, мы объясним виджет Frame позже.

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

Рисунок 9.1, “Примеры меток” показывает результат запуска программы.

Рисунок 9.1. Примеры меток

Label Examples

Это исходный код label.py :

#!/usr/bin/env python
# --*-- coding:utf-8 --*--
# example label.py

import pygtk
pygtk.require('2.0')
import gtk

class Labels:
    def __init__(self):
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.connect("destroy", lambda w: gtk.main_quit())

        self.window.set_title("Примеры меток")
        vbox = gtk.VBox(False, 5)
        hbox = gtk.HBox(False, 5)
        self.window.add(hbox)
        hbox.pack_start(vbox, False, False, 0)
        self.window.set_border_width(5)

        frame = gtk.Frame("Обычная метка")
        label = gtk.Label("Это обычная метка")
        frame.add(label)
        vbox.pack_start(frame, False, False, 0)
  
        frame = gtk.Frame("Многострочная метка")
        label = gtk.Label("Это многострочная метка.\nВторая строка.\n"
                            "Третья строка")
        frame.add(label)
        vbox.pack_start(frame, False, False, 0)
  
        frame = gtk.Frame("Метка выровненная по левому краю")
        label = gtk.Label("Это выровненная по левому краю\n"
                             "Многострочная метка.\nТретья      строка")
        label.set_justify(gtk.JUSTIFY_LEFT)
        frame.add(label)
        vbox.pack_start(frame, False, False, 0)
  
        frame = gtk.Frame("Метка выравненная по правому краю")
        label = gtk.Label("Это выровненная по правому краю\nМногострочная метка.\n"
                             "Четвёртая строка (Шутка ^_^)")
        label.set_justify(gtk.JUSTIFY_RIGHT)
        frame.add(label)
        vbox.pack_start(frame, False, False, 0)

        vbox = gtk.VBox(False, 5)
        hbox.pack_start(vbox, False, False, 0)
        frame = gtk.Frame("Метка с переносами строк")
        label = gtk.Label("Это пример метки с переносами строк.  Она "
                             "не будет знимать всю доступную             "
                             "ей ширину, но она автоматически "
                             "переносится по словам.  "
                             "Пришло время всем хорошим людям прийти "
                             "на помощь своей стороне.  "
                             "Шла Саша по шоссе, и сосала сушку.\n"
                             "     Она правильно поддерживает несколько абзацев, "
                             "и  правильно   добавляет "
                             "дополнительные          пробелы. ")
        label.set_line_wrap(True)
        frame.add(label)
        vbox.pack_start(frame, False, False, 0)
  
        frame = gtk.Frame("Растянутая метка с переносами")
        label = gtk.Label("Это пример растянутой метки с переносами строк.  "
                             "Она будет занимать "
                             "всю доступную              ей ширину.  "
                             "Это предложение для доказательства "
                             "данной точки зрения.  Это другое предложение. "
                             "Here comes the sun, do de do de do.\n"
                             "    Это новый абзац.\n"
                             "    Этот абзац новее, длиннее "
                             "и лучше.  И к сожалению он подошёл "
                             "к концу.")
        label.set_justify(gtk.JUSTIFY_FILL)
        label.set_line_wrap(True)
        frame.add(label)
        vbox.pack_start(frame, False, False, 0)
  
        #~ frame = gtk.Frame("Подчёркнутая метка")
        #~ label = gtk.Label("Строка подчёркнута!\n"
                             #~ "А эта подчёркнута весьма странным образом")
        #~ label.set_justify(gtk.JUSTIFY_LEFT)
        #~ label.set_pattern(
            #~ "_________________________ _ _________ _ ______     __ _______ ___")
        #~ print label.get_pattern()
        #~ frame.add(label)
        #~ vbox.pack_start(frame, False, False, 0)
        self.window.show_all ()

def main():
    gtk.main()
    return 0

if __name__ == "__main__":
    Labels()
    main()

Заметьте, что “Растянутая метка с переносами” не растянута по ширине.

Код с подчёркиванием закомментирован, поскольку в этом виде не работает, но был представлен в статье John Finlay.


Предыдущая страница На уровень выше  Следующая страница
8.5. Пример работы виджетов регулировки диапазона К оглавлению  9.2. Стрелка (gtk.Arrow)

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>