MyTetra Share
Делитесь знаниями!
кнопка с иконкой
Время создания: 07.05.2017 12:51
Раздел: Python - PyGTK - Buttons
Запись: xintrea/mytetra_db_mcold/master/base/1494148321i42w8w6qiy/text.html на raw.githubusercontent.com

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

Исходный код программы buttons.py:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

#!/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 - Излучается при выходе курсора из области кнопки

Прикрепленные файлы:
 
MyTetra Share v.0.59
Яндекс индекс цитирования