MyTetra Share
Делитесь знаниями!
ToggleButton
Время создания: 07.05.2017 12:51
Текстовые метки: example, theory
Раздел: Python - PyGTK - Buttons - ToggleButton
Запись: xintrea/mytetra_db_mcold/master/base/1494148844kwcgcmcil0/text.html на raw.githubusercontent.com

Кнопки включения (ToggleButton, они же: залипающие кнопки, выключатели) наследуют свойства обычных кнопок и очень похожи на них, исключая то, что они всегда находятся в одном из двух состояний, переключаемых по щелчку. Они могут быть в нажатом состоянии, и по повторному клику возвращаться в выключенное. Щёлкните ещё раз, и она снова зафиксируется.

Кнопки включения это основа для зависимых и независимых переключателей (RadioButton и CheckButton). Так большинство вызовов, используемых в ToggleButton, наследуются этими переключателями. Заострим на этом внимание тогда, когда дойдём до зависимых и независимых переключателей.

Создание нового выключателя:

toggle_button = gtk.ToggleButton(label=None)

Как вы можете представить, они работают аналогично вызовам для обычных кнопок. Если надпись не указана, то кнопки будут пустые. Текст надписи проверяется на символы с префиксом ‘_’ для мнемонических команд.

Для получения состояния залипающей кнопки или любого другого переключателя , будем использовать конструкцию, указанную в примере ниже. Здесь состояние проверяется вызовом метода get_active() для объекта ToggleButton. Самый важный для нас сигнал, излучаемый залипающими кнопками (или другими переключателями), это сигнал “toggled”. Для проверки состояния этих кнопок, настраиваем обработчик сигнала “toggled” и проверяем поля объекта, содержащие его состояние. Callback-функция будет выглядеть примерно так:

def toggle_button_callback(widget, data):

if widget.get_active():

# Если управление здесь, то кнопка зажата

else:

# Если управление здесь то кнопка отжата

Для смены состояния залипающей кнопки или прочих переключателей используйте метод:

toggle_button.set_active(is_active)

Этот метод  может быть использован для всех переключателей. Указание TRUE или FALSE для аргумента is_active определяет, нажата кнопка или отжата. При создании кнопки она по умолчанию отжата, или FALSE.

Заметим, что когда вы используете метод set_active(), и состояние меняется, то кнопка излучает сигналы “clicked” и “toggled”.

toggle_button.get_active()

Этот метод возвращает текущее значение состояния как булево значение, TRUE или FALSE.

Программа togglebutton.py предоставляет простой пример использования выключателей. Рисунок 6.2, “Пример переключателей” показывает окно со включенным вторым выключателем:

Рисунок 6.2. Пример выключателей

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

 

?

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

75

76

77

78

79

80

81

82

83

84

85

86

87

#!/usr/bin/env python

# --*-- coding:utf-8 --*--

# example togglebutton.py

 

import pygtk

pygtk.require('2.0')

import gtk

 

class ToggleButton:

    # Наш callback.

    # Данные переданные методу выводятся в stdout

    def callback(self, widget, data=None):

        print "%s было нажато %s" % (data, ("OFF", "ON")[widget.get_active()])

 

    # Этот callback завершает программу

    def delete_event(self, widget, event, data=None):

        gtk.main_quit()

        return False

 

    def __init__(self):

        # Создаём новое окно

        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)

 

        # Устанавливаем заголовок окна

        self.window.set_title("Выключатели")

 

        # Устанавливаем обработчик для delete_event,

        # который немедленно завершает GTK.

        self.window.connect("delete_event", self.delete_event)

 

        # Устанавливаем ширину границы окна

        self.window.set_border_width(20)

 

        # Создаём VBox

        vbox = gtk.VBox(True, 2)

 

        # Размещаем VBox в главном окне

        self.window.add(vbox)

 

        # Создаём первую кнопку

        button = gtk.ToggleButton("выключатель 1")

 

        # Когда кнопка меняет состояние вызываем наш callback

        # с указателем на текст "выключатель 1" в виде аргумента

        button.connect("toggled", self.callback, "выключатель 1")

 

        # Вставляем кнопку 1

        vbox.pack_start(button, True, True, 2)

 

        button.show()

 

        # Создаём вторую кнопку

 

        button = gtk.ToggleButton("выключатель 2")

 

        # Когда кнопка меняет состояние вызываем наш callback

        # с указателем на текст "выключатель 2" в виде аргумента

        button.connect("toggled", self.callback, "выключатель 2")

        # Вставляем кнопку 2

        vbox.pack_start(button, True, True, 2)

 

        # Активируем кнопку 2

        button.set_active(True)

 

        button.show()

 

        # Создаём кнопку "Выход"

        button = gtk.Button("Выход")

 

        # По щелчку по кнопке вызываем функцию main_quit

        # и программа завершает работу

        button.connect("clicked", lambda wid: gtk.main_quit())

 

        # Вставляем кнопку выхода

        vbox.pack_start(button, True, True, 2)

 

        button.show()

        vbox.show()

        self.window.show()

 

def main():

    gtk.main()

    return 0      

 

if __name__ == "__main__":

    ToggleButton()

    main()

Важны строки 12-13, определяющие метод callback(), который выводит метку и состояние изменившейся залипающей кнопки. Строки 45 и 59 подключают сигнал “toggled” к методу callback(). Строка 64 активирует кнопку №2.

 
MyTetra Share v.0.58
Яндекс индекс цитирования