10.3. Контейнер Fixed

Контейнер Fixed позволяет вам  размещать виджеты в  чётко определённой позиции относительно верхнего левого угла окна. Положение виджетов может изменятся динамически.

С виджетом fixed связано всего три вызова:

  fixed = gtk.Fixed()

fixed.put(widget, x, y)

fixed.move(widget, x, y)

Функция gtk.Fixed() позволяет вам создавать новый контейнер Fixed.

Метод put() помещает виджет в определённое место указанное аргументами x и y.

Метод move() позволяет указанному виджету перемещаться в новое место.

Пример fixed.py показывает использование контейнера FixedРисунок 10.2, “Пример контейнера Fixed” показывает окно программы:

Рисунок 10.2. Пример контейнера Fixed

Fixed Example

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

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # example fixed.py
  4.  
  5. import pygtk
  6. pygtk.require('2.0')
  7. import gtk
  8.  
  9. class FixedExample:
  10. # Этот callback передвигает кнопку на новую позицию
  11. # в контейнере Fixed.
  12. def move_button(self, widget):
  13. self.x = (self.x+30)%300
  14. self.y = (self.y+50)%300
  15. self.fixed.move(widget, self.x, self.y)
  16.  
  17. def __init__(self):
  18. self.x = 50
  19. self.y = 50
  20.  
  21. # Создаём новое окно
  22. window = gtk.Window(gtk.WINDOW_TOPLEVEL)
  23. window.set_title("Fixed Container")
  24.  
  25. # Здесь мы подключаем событие "destroy" к обработчику
  26. window.connect("destroy", lambda w: gtk.main_quit())
  27.  
  28. # Устанавливаем ширину границы окна.
  29. window.set_border_width(10)
  30.  
  31. # Создаём контейнер Fixed
  32. self.fixed = gtk.Fixed()
  33. window.add(self.fixed)
  34. self.fixed.show()
  35.  
  36. for i in range(1, 4):
  37. # Создаём новую кнопку с меткой "Press me"
  38. button = gtk.Button("Press me")
  39.  
  40. # Когда кнопка получает сигнал "clicked" она вызывает
  41. # метод move_button().
  42. button.connect("clicked", self.move_button)
  43.  
  44. # Здесь кнопка размещается в контейнере.
  45. self.fixed.put(button, i*50, i*50)
  46.  
  47. # Последний шаг - отображаем созданный виджет.
  48. button.show()
  49.  
  50. # Отображаем окно.
  51. window.show()
  52.  
  53. def main():
  54. # Запускаем основной цикл
  55. gtk.main()
  56. return 0
  57.  
  58. if __name__ == "__main__":
  59. FixedExample()
  60. main()
  61.