4.5. Пример размещения таблицей

Программа-пример table.py создаёт окно с тремя кнопками, используя таблицу 2х2. Две первые кнопки находятся в верхней строке. Третья кнопка (Выход) находится на нижней строке, занимая два столбца. Рисунок 4.4, “Размещение таблицей” показывает получаемое окно:

Рисунок 4.4. Размещение таблицей

Packing using a Table

Здесь исходный код:

  1. #!/usr/bin/env python
  2. # --*-- coding:utf-8 --*--
  3. # example table.py
  4.  
  5. import pygtk
  6. pygtk.require('2.0')
  7. import gtk
  8.  
  9. class Table:
  10. # Наш callback.
  11. # Данные передаваемые этому методу выводятся в stdout
  12. def callback(self, widget, data=None):
  13. print "Привет снова - %s была нажата" % data
  14.  
  15. # Этот callback завершает программу
  16. def delete_event(self, widget, event, data=None):
  17. gtk.main_quit()
  18. return False
  19.  
  20. def __init__(self):
  21. # Создаём новое окно
  22. self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
  23.  
  24. # Устанавливаем заголовок окна
  25. self.window.set_title("Table")
  26.  
  27. # Устанавливаем обработчик для delete_event, который немедленно
  28. # Завершает работу GTK.
  29. self.window.connect("delete_event", self.delete_event)
  30.  
  31. # Устанавливаем границу для окна
  32. self.window.set_border_width(20)
  33.  
  34. # Создаём таблицу 2х2
  35. table = gtk.Table(2, 2, True)
  36.  
  37. # Размещаем таблицу в главном окне
  38. self.window.add(table)
  39.  
  40. # Создаём первую кнопку
  41. button = gtk.Button("кнопка 1")
  42.  
  43. # По нажатии кнопки мы вызываем метод "callback"
  44. # с указателем на "кнопка 1" в виде аргумента
  45. button.connect("clicked", self.callback, "кнопка 1")
  46.  
  47.  
  48. # Вставляем кнопку 1 в верхнюю левую ячейку таблицы
  49. table.attach(button, 0, 1, 0, 1)
  50.  
  51. button.show()
  52.  
  53. # Создаём вторую кнопку
  54.  
  55. button = gtk.Button("кнопка 2")
  56.  
  57. # По нажатию кнопки мы вызываем метод "callback"
  58. # с указателем на "кнопка 2" как аргумент
  59. button.connect("clicked", self.callback, "кнопка 2")
  60. # Вставляем кнопку 2 в верхнюю правую ячейку таблицы.
  61. table.attach(button, 1, 2, 0, 1)
  62.  
  63. button.show()
  64.  
  65. # Создаём кнопку "Выход"
  66. button = gtk.Button("Выход")
  67.  
  68. # Когда кнопка нажата, мы вызываем функцию main_quit
  69. # и программа завершает свою работу
  70. button.connect("clicked", lambda w: gtk.main_quit())
  71.  
  72. # Вставляем кнопку выхода в 2 нижние ячейки.
  73. table.attach(button, 0, 2, 1, 2)
  74.  
  75. button.show()
  76.  
  77. table.show()
  78. self.window.show()
  79.  
  80. def main():
  81. gtk.main()
  82. return 0
  83.  
  84. if __name__ == "__main__":
  85. Table()
  86. main()
  87.  

Класс Table определён в строках 9-78. Строки 12-13 определяют метод callback() , который вызывается по клику на любую из двух кнопок. Callback просто выводит в консоль сообщение, включающее название нажатой кнопки.

Строки 16-18 определяют метод delete_event(), который вызывается при закрытии окна оконным менеджером.

Строки 20-78 определяют конструктор __init__() класса Table.  Он создаёт окно (строка 22), устанавливает заголовок окна (строка 25), подключает callback-функцию delete_event() для сигнала "delete_event" (строка 29), и устанавливает ширину границы (строка 32). gtk.Table создаётся в строке 35 и добавляется внутрь окна в строке 38.

Две верхние кнопки создаются в строках 41 и 55, их сигналы "clicked" подключаются к методу callback() в строках 45 и 59, и вкладываются в первую строку таблицы (строки 49 и 61). Строки 66-72 создают кнопку "Выход", подключают её сигнал "clicked" к функции main_quit() и вкладываются в таблицу, во вторую строку.