Содержание
Мы уже видели почти всё, что нужно знать о кнопках. Они довольно простые. Вы можете использовать функцию gtk.Button() для создания кнопки с меткой, передаваемой строковым параметром, или создать пустую кнопку не указывая строку. Также вы можете разместить метку или картинку в новую кнопку. Для этого создайте новую коробку, и разместите объекты в ней, используя обычный метод pack_start(), затем используйте метод add() для размещения коробки в кнопке.
Функция создания коробки:
button = gtk.Button(label=None, stock=None) |
если текст label указан, то он используется как надпись для кнопки. Если указан stock он используется как иконка и надпись для кнопки одновременно. Stock может содержать:
STOCK_DIALOG_INFO STOCK_DIALOG_WARNING STOCK_DIALOG_ERROR STOCK_DIALOG_QUESTION STOCK_DND STOCK_DND_MULTIPLE STOCK_ADD STOCK_APPLY STOCK_BOLD STOCK_CANCEL STOCK_CDROM STOCK_CLEAR STOCK_CLOSE STOCK_CONVERT STOCK_COPY STOCK_CUT STOCK_DELETE STOCK_EXECUTE STOCK_FIND STOCK_FIND_AND_REPLACE STOCK_FLOPPY STOCK_GOTO_BOTTOM STOCK_GOTO_FIRST STOCK_GOTO_LAST STOCK_GOTO_TOP STOCK_GO_BACK STOCK_GO_DOWN STOCK_GO_FORWARD STOCK_GO_UP STOCK_HELP STOCK_HOME STOCK_INDEX STOCK_ITALIC STOCK_JUMP_TO STOCK_JUSTIFY_CENTER STOCK_JUSTIFY_FILL STOCK_JUSTIFY_LEFT STOCK_JUSTIFY_RIGHT STOCK_MISSING_IMAGE STOCK_NEW STOCK_NO STOCK_OK STOCK_OPEN STOCK_PASTE STOCK_PREFERENCES STOCK_PRINT STOCK_PRINT_PREVIEW STOCK_PROPERTIES STOCK_QUIT STOCK_REDO STOCK_REFRESH STOCK_REMOVE STOCK_REVERT_TO_SAVED STOCK_SAVE STOCK_SAVE_AS STOCK_SELECT_COLOR STOCK_SELECT_FONT STOCK_SORT_ASCENDING STOCK_SORT_DESCENDING STOCK_SPELL_CHECK STOCK_STOP STOCK_STRIKETHROUGH STOCK_UNDELETE STOCK_UNDERLINE STOCK_UNDO STOCK_YES STOCK_ZOOM_100 STOCK_ZOOM_FIT STOCK_ZOOM_IN STOCK_ZOOM_OUT |
Программа buttons.py предоставляет пример использования gtk.Button() для создания кнопки с картинкой и надписью. Код создания коробки отделён, так что вы сможете использовать его в своих программах. В дальнейшем ещё будут примеры использования картинок. Рисунок 6.1, “Кнопка с картинкой и надписью” показывает окно содержащее картинку и надпись:
Исходный код программы buttons.py:
#!/usr/bin/env python # --*-- coding:utf-8 --*-- # example-start buttons buttons.py import pygtk pygtk.require('2.0') import gtk # Создаём новый HBox с надписью и картинкой # размещаем их там и возвращаем коробку. def xpm_label_box(parent, xpm_filename, label_text): # Создаём коробку для картинки и надписи box1 = gtk.HBox(False, 0) box1.set_border_width(2) # Создаём картинку image = gtk.Image() image.set_from_file(xpm_filename) # Создаём надпись label = gtk.Label(label_text) # Размещаем надпись и картинку в HBox box1.pack_start(image, False, False, 3) box1.pack_start(label, False, False, 3) image.show() label.show() return box1 class Buttons: # Наш обычный callback def callback(self, widget, data=None): print "Привет снова - %s была нажата" % data def __init__(self): # Создаём новое окно self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.set_title("Картинки на кнопках!") # Использовать это со всеми окнами будет хорошим решением. self.window.connect("destroy", lambda wid: gtk.main_quit()) self.window.connect("delete_event", lambda a1,a2:gtk.main_quit()) # Устанавливаем ширину границы окна. self.window.set_border_width(10) # Создаём новую кнопку button = gtk.Button() # Привязываем сигнал "clicked" к нашему callback button.connect("clicked", self.callback, "классная кнопка") # Это вызывает нашу функцию создания коробки box1 = xpm_label_box(self.window, "info.xpm", "классная кнопка") # Размещаем окно со всеми виджетами button.add(box1) box1.show() button.show() self.window.add(button) self.window.show() def main(): gtk.main() return 0 if __name__ == "__main__": Buttons() main()
Строки 12-30 определяют вспомогательную функцию xpm_label_box(), которая создаёт горизонтальную коробку с шириной границы 2 (строки 14-15), заполняет её картинкой (строка 25) и меткой (строка 26).
Строки 36-70 определяют класс Buttons. Строки 37-66 определяют конструктор, который создаёт окно (строка 39), устанавливает заголовок (строка 41), подключает сигналы “delete_event” и “destroy” (строки 44-44). Строка 51 создаёт кнопку без метки. Её сигнал “clicked” присоединяется к методу callback() в строке 54. Функция xpm_label_box() вызывается в строке 57 для создания картинки и метки, укладываемые в кнопку.
Функция xpm_label_box() может быть использована для размещения картинок и надписей в любой виджет, который может быть контейнером.
Виджет-кнопка имеет следующие сигналы:
pressed - Излучается по нажатию кнопки released - Излучается по отжатию кнопки clicked - Излучается при отжатии нажатой кнопки (по клику) enter - Излучается при наведении курсора на кнопку leave - Излучается при выходе курсора из области кнопки |
Предыдущая страница | На уровень выше | Следующая страница |
5.2. Виджеты без окон | К оглавлению | 6.2. Выключатели (gtk.ToggleButton) |