PyGTK - класс AspectFrame

Класс gtk.AspectFrame является подклассом класса Frame. Дочерний виджет в этом кадре всегда сохраняет свое соотношение сторон (ширины и высоты), даже если размер главного окна изменяется.

Свойство ratio виджета gtk.AspectFrame определяет соотношение ширины и высоты виджета. Соотношение сторон 0,5 означает, что ширина равна половине высоты; соотношение сторон 2,0 означает, что ширина в два раза больше высоты. Значение по умолчанию для свойства "ratio" - 1.0.

Для конструктора класса gtk.AspectFrame используется следующий синтаксис:

gtk.AspectFrame (label = None, xalign = 0.5, yalign = 0.5, ratio = 1.0, obey_child = True)

В xalignСвойство определяет долю горизонтального свободного пространства слева от дочернего элемента. 0.0 означает, что слева нет свободного места, 1.0 означает, что все свободное пространство слева.

В yalignСвойство определяет долю вертикального свободного пространства над дочерним элементом . 0.0 означает, что сверху нет свободного места, 1.0 означает все свободное пространство сверху.

Соотношение ширины рамы к высоте сохраняется, если obey_child свойство False.

Свойство obey_child определяет, следует ли игнорировать соотношение. По умолчанию установлено True.

Следующий код похож на тот, который используется для класса Frame. Единственное отличие состоит в том, что ButonBox помещается в виджет AspectFrame.

frm = gtk.AspectFrame(label = None, xalign = 0.5, yalign = 0.5, 
   ratio = 5.0, obey_child = False)

Note - Для свойства obey_child задано значение False, потому что желательно сохранить соотношение сторон даже при изменении размера окна.

пример

Обратите внимание на следующий код -

import gtk

class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Aspect Frame Demo")
      self.set_default_size(250, 200)
      self.set_border_width(5)
      frm = gtk.AspectFrame(label = None, xalign = 0.5, yalign = 0.5, 
         ratio = 5.0, obey_child = False)
      hb = gtk.HButtonBox()
      btn1 = gtk.RadioButton(None,"Degree")
      hb.add(btn1)
      btn2 = gtk.RadioButton(btn1,"P.G.")
      hb.add(btn2)
      btn3 = gtk.RadioButton(btn1,"Doctorate")
      hb.add(btn3)
      frm.add(hb)
      frm.set_label("Qualifications")
      self.add(frm)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
      
if __name__ == '__main__':
   PyApp()
   gtk.main()

Приведенный выше код создаст следующие исходные окна с измененным размером:

Original Window

Resized Window