Кнопки

6.1. Обычные кнопки (gtk.Button)

Мы уже видели почти всё, что нужно знать о кнопках. Они довольно простые. Вы можете использовать функцию 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, “Кнопка с картинкой и надписью” показывает окно содержащее картинку и надпись:

Рисунок 6.1. Кнопка с картинкой и надписью

Button with Pixmap and Label

Исходный код программы 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)

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>