10.10. ButtonBox

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

  hbutton_box = gtk.HButtonBox()

vbutton_box = gtk.VButtonBox()

У виджета ButtonBox есть только методы отвечающие за расположение кнопок.

Компоновка кнопок устанавливается использованием:

  button_box.set_layout(layout_style)

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

  BUTTONBOX_DEFAULT_STYLE
BUTTONBOX_SPREAD
BUTTONBOX_EDGE
BUTTONBOX_START
BUTTONBOX_END

Текущий layout_style может быть получен с помощью:

  layout_style = button_box.get_layout()

Для добавления кнопок на ButtonBox используется обычный для контейнеров метод:

  button_box.add(widget)

Пример buttonbox.py показывает все  варианты компоновки в ButtonBox:

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

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # пример buttonbox.py
  4.  
  5. import pygtk
  6. pygtk.require('2.0')
  7. import gtk
  8.  
  9. class ButtonBoxExample:
  10. # Создаём Button Box с определёнными параметрами
  11. def create_bbox(self, horizontal, title, spacing, layout):
  12. frame = gtk.Frame(title)
  13.  
  14. if horizontal:
  15. bbox = gtk.HButtonBox()
  16. else:
  17. bbox = gtk.VButtonBox()
  18.  
  19. bbox.set_border_width(5)
  20. frame.add(bbox)
  21.  
  22. # Устанавливаем внешний вид ButtonBox
  23. bbox.set_layout(layout)
  24. bbox.set_spacing(spacing)
  25.  
  26. button = gtk.Button(stock=gtk.STOCK_OK)
  27. bbox.add(button)
  28.  
  29. button = gtk.Button(stock=gtk.STOCK_CANCEL)
  30. bbox.add(button)
  31.  
  32. button = gtk.Button(stock=gtk.STOCK_HELP)
  33. bbox.add(button)
  34.  
  35. return frame
  36.  
  37. def __init__(self):
  38. window = gtk.Window(gtk.WINDOW_TOPLEVEL)
  39. window.set_title("Группы кнопок")
  40.  
  41. window.connect("destroy", lambda x: gtk.main_quit())
  42.  
  43. window.set_border_width(10)
  44.  
  45. main_vbox = gtk.VBox(False, 0)
  46. window.add(main_vbox)
  47.  
  48. frame_horz = gtk.Frame("Горизонтальные группы")
  49. main_vbox.pack_start(frame_horz, True, True, 10)
  50.  
  51. vbox = gtk.VBox(False, 0)
  52. vbox.set_border_width(10)
  53. frame_horz.add(vbox)
  54.  
  55. vbox.pack_start(self.create_bbox(True, "Spread (spacing 40)",
  56. 40, gtk.BUTTONBOX_SPREAD),
  57. True, True, 0)
  58.  
  59. vbox.pack_start(self.create_bbox(True, "Edge (spacing 30)",
  60. 30, gtk.BUTTONBOX_EDGE),
  61. True, True, 5)
  62.  
  63. vbox.pack_start(self.create_bbox(True, "Start (spacing 20)",
  64. 20, gtk.BUTTONBOX_START),
  65. True, True, 5)
  66.  
  67. vbox.pack_start(self.create_bbox(True, "End (spacing 10)",
  68. 10, gtk.BUTTONBOX_END),
  69. True, True, 5)
  70.  
  71. frame_vert = gtk.Frame("Вертикальные группы")
  72. main_vbox.pack_start(frame_vert, True, True, 10)
  73.  
  74. hbox = gtk.HBox(False, 0)
  75. hbox.set_border_width(10)
  76. frame_vert.add(hbox)
  77.  
  78. hbox.pack_start(self.create_bbox(False, "Spread (spacing 5)",
  79. 5, gtk.BUTTONBOX_SPREAD),
  80. True, True, 0)
  81.  
  82. hbox.pack_start(self.create_bbox(False, "Edge (spacing 30)",
  83. 30, gtk.BUTTONBOX_EDGE),
  84. True, True, 5)
  85.  
  86. hbox.pack_start(self.create_bbox(False, "Start (spacing 20)",
  87. 20, gtk.BUTTONBOX_START),
  88. True, True, 5)
  89.  
  90. hbox.pack_start(self.create_bbox(False, "End (spacing 20)",
  91. 20, gtk.BUTTONBOX_END),
  92. True, True, 5)
  93.  
  94. window.show_all()
  95.  
  96. def main():
  97. # Вход в цикл событий
  98. gtk.main()
  99. return 0
  100.  
  101. if __name__ == "__main__":
  102. ButtonBoxExample()
  103. main()
  104.