10.5. Рамки

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

Frame может быть создан с помощью функции:

  frame = gtk.Frame(label=None)

label по умолчанию помещается в верхний левый угол рамки. Указание значения None  для аргумента label, или отсутствие этого аргумента в результате дадут отсутствие метки. Текст метки может быть изменён с помощью метода:

  frame.set_label(label)

Позиция метки может быть изменена использованием метода:

  frame.set_label_align(xalign, yalign)

xalign и yalign прнимают значения между 0.0 и 1.0. xalign показывает положение метки на рамке по горизонтали. yalign в текущий момент не используется. Значение по умолчанию для xalign равно 0.0, что помещает метку в левый угол.

Следующий метод меняет стиль рамки.

  frame.set_shadow_type(type)

Аргумент type может принимать одно из следующих значений:

  SHADOW_NONE
SHADOW_IN
SHADOW_OUT
SHADOW_ETCHED_IN # по умолчанию
SHADOW_ETCHED_OUT

Пример frame.py показывает использование рамок. Рисунок 10.4, “Пример рамок” показывает получаемое окно:

Рисунок 10.4. Пример рамок

Frame Example

Исходный код для frame.py:

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # example frame.py
  4.  
  5. import pygtk
  6. pygtk.require('2.0')
  7. import gtk
  8.  
  9. class FrameExample:
  10. def __init__(self):
  11. # Создаём новое окно
  12. window = gtk.Window(gtk.WINDOW_TOPLEVEL)
  13. window.set_title("Пример gtk.Frame")
  14.  
  15. # Здесь мы подключаем событие "destroy" к обработчику
  16. window.connect("destroy", lambda w: gtk.main_quit())
  17. window.set_size_request(300, 300)
  18.  
  19. # Устанавливаем ширину границы окна
  20. window.set_border_width(10)
  21.  
  22. # Создаём рамку
  23. frame = gtk.Frame()
  24. window.add(frame)
  25.  
  26. # Указываем метку
  27. frame.set_label('<span color="red">GTK Frame</span> Widget')
  28.  
  29. # Разрешаем форматированный текст в метке
  30. label = frame.get_label_widget()
  31. label.set_use_markup(True)
  32.  
  33. # Выравниваем метку по правому краю
  34. frame.set_label_align(1.0, 0.0)
  35.  
  36. # Задаём стиль рамки
  37. frame.set_shadow_type(gtk.SHADOW_ETCHED_OUT)
  38. frame.show()
  39.  
  40. # Отображаем окно
  41. window.show()
  42.  
  43. def main():
  44. # Запускаем основной цикл
  45. gtk.main()
  46. return 0
  47.  
  48. if __name__ == "__main__":
  49. FrameExample()
  50. main()
  51.  

Примеры calendar.py, label.py и spinbutton.py также используют рамки.