Виджет AspectFrame похож на виджет Frame, за тем исключением что он позволяет фиксировать соотношение сторон (ширины к высоте) помещаемых в него виджетов, добавлять дополнительное место если это необходимо. Используется он, например, если вы хотите сделать предварительный просмотр большого изображения. Размер области просмотра должен варьироваться когда пользователь меняет размеры окна, но соотношение сторон всегда должно оставаться оригинальным.
Для создания нового AspectFrame используйте:
aspect_frame = gtk.AspectFrame(label=None, xalign=0.5, yalign=0.5, ratio=1.0, obey_child=True) |
label определяет текст отображаемый на метке, xalign и yalign определяют выравнивание также, как и в виджете gtk.Alignment. Если obey_child равен True, то соотношение сторон gtl.AspectFrame будет соответствовать соотношению сторон помещённого внурть виджета. А если False, то соотношение задаётся аргументом ratio (соотношение ширины к высоте).
Для изменения параметров существующего AspectFrame, вы можете использовать:
aspect_frame.set(xalign=0.0, yalign=0.0, ratio=1.0, obey_child=TRUE) |
Пример aspectframe.py использует AspectFrame для отображения области, с соотношением сторон 2:1. Здесь неважно как пользователь меняет размер окна. Рисунок 10.5, “Пример AspectFrame” показывает внешний вид окна:
Исходный код aspectframe.py:
#!/usr/bin/env python # -*- coding: utf-8 -*- # example aspectframe.py import pygtk pygtk.require('2.0') import gtk class AspectFrameExample: def __init__(self): window = gtk.Window(gtk.WINDOW_TOPLEVEL); window.set_title("Aspect Frame") window.connect("destroy", lambda x: gtk.main_quit()) window.set_border_width(10) # Создаём aspect_frame и добавляем его на окно aspect_frame = gtk.AspectFrame("2x1", # label 0.5, # center x 0.5, # center y 2, # xsize/ysize = 2 False) # ignore child's aspect window.add(aspect_frame) aspect_frame.show() # теперь добавляем виджет на aspect_frame drawing_area = gtk.DrawingArea() # Запрашиваем окно 200х200, но AspectFrame даёт нам только 200х100 # т.к. мы указали соотношение 2:1 drawing_area.set_size_request(200, 200) aspect_frame.add(drawing_area) drawing_area.show() window.show() def main(): gtk.main() return 0 if __name__ == "__main__": AspectFrameExample() main()
Предыдущая страница | На уровень выше | Следующая страница |
10.5. Рамка (gtk.Frame) | К оглавлению | 10.7. Делимое окно (gtk.HPaned, gtk.VPaned) |