Выключатели (gtk.ToggleButton)

Кнопки включения (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. Пример выключателей

Toggle Button Example

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

 

#!/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.

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

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

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