Выбор цвета (gtk.ColorSelection)

Виджет выбора цвета предназначен для интерактивного выбора цвета пользователем. Этот составной виджет позволяет пользователю выбирать цвет тройками параметров: RGB (Red, Green, Blue) и HSV (Hue, Saturation, Value). Происходит это путём выбора одиночных значений ползунками, либо выбирая желаемый цвет из кольца hue-saturation или палитры предустановленных цветов. Опционально также может быть выбрана прозрачность.

Виджет выбора цвета излучает только один сигнал, “color_changed”, который излучается всегда при смене цвета в виджете, когда пользователь выбирает его, либо вы выбираете его явно с помощью метода set_color().

Давайте посмотрим что же предлагает нам этот виджет. Виджет существует в двух вариациях: gtk.ColorSelection и gtk.ColorSelectionDialog.

  colorsel = gtk.ColorSelection()

Вы можете не использовать конструктор на прямую. Тогда создастся виджет ColorSelection без родителей. Виджет ColorSelection наследуется от VBox.

  colorseldlg = gtk.ColorSelectionDialog(title)

Где title это строка используемая в заголовке диалогового окна.

Это наиболее распространённый конструктор ColorSelection. Конструктор создаёт ColorSelectionDialog. Он содержит Frame, содержащий виджет ColorSelection, HSeparator и HBox с тремя кнопками: Ok, Cancel и Help. Вы можете управлять этими кнопками, используя атрибуты ok_button, cancel_button и help_button виджета ColorSelectionDialog (например, colorseldlg.ok_button). Виджет ColorSelection находится в атрибуте colorsel:

  colorsel = colorseldlg.colorsel

Виджет ColorSelection имеет несколько методов для изменения его характеристик и предоставления доступа к выбору цвета.

  colorsel.set_has_opacity_control(has_opacity)

Виджет ColorSelection поддерживает регулировку прозрачности цвета (также известной как альфа-канал). По умолчанию это отключено. Вызов метода с has_opacity равном TRUE включает прозрачность. Тем же образом has_opacity установленный в FALSE отключит прозрачность.

  colorsel.set_current_color(color)
  colorsel.set_current_alpha(alpha)

Вы можете установить текущий цвет явно, вызовом метода set_current_color() с gtk.gdk.Color. Настройка прозрачности происходит с помощью метода set_current_alpha(). Значение alpha должно быть между 0 (полная прозрачность) и 65636 (полная непрозрачность).

  color = colorsel.get_current_color()
  alpha = colorsel.get_current_alpha()

Когда вам нужно узнать текущий цвет, обычно при получении сигнала “color_changed”, используйте эти методы.

Пример colorsel.py показывает использование ColorSelectionDialog. Эта программа отображает окно с областью для рисования. Щелчок по ней открывает окно выбора цвета, выбор цвета в диалоговом окне меняет цвет фона. Рисунок 9.13, “Пример окна выбора цвета” показывает программу в действии:

Рисунок 9.13. Пример окна выбора цвета

Color Selection Dialog Example

Исходный код colorsel.py:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# example colorsel.py

import pygtk
pygtk.require('2.0')
import gtk

class ColorSelectionExample:
    # Обработчик color_changed
    def color_changed_cb(self, widget):
        # Получаем colormap
        colormap = self.drawingarea.get_colormap()

        # Получаем текущий цвет
        color = self.colorseldlg.colorsel.get_current_color()

        # Устанавливаем цвет фона окна
        self.drawingarea.modify_bg(gtk.STATE_NORMAL, color)

    # Обработчик событий области рисования
    def area_event(self, widget, event):
        handled = False

        # Проверяем получили ли мы событие щелчка по кнопке
        if event.type == gtk.gdk.BUTTON_PRESS:
            handled = True

            # Создаём окно выбора цвета
            if self.colorseldlg == None:
                self.colorseldlg = gtk.ColorSelectionDialog(
                    "Выбор фонового цвета")

            # Получаем виджет ColorSelection
            colorsel = self.colorseldlg.colorsel

            colorsel.set_previous_color(self.color)
            colorsel.set_current_color(self.color)
            colorsel.set_has_palette(True)

            # подключаем сигнал "color_changed"
            colorsel.connect("color_changed", self.color_changed_cb)
            # Показываем диалоговое окно
            response = self.colorseldlg.run()

            if response -- gtk.RESPONSE_OK:
                self.color = colorsel.get_current_color()
            else:
                self.drawingarea.modify_bg(gtk.STATE_NORMAL, self.color)

            self.colorseldlg.hide()

        return handled

    # Закрытие
    def destroy_window(self, widget, event):
        gtk.main_quit()
        return True

    def __init__(self):
        self.colorseldlg = None
        # Создаём верхнее окно, указываем заголовоу и политики
        window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        window.set_title("Проба выбора цвета")
        window.set_resizable(True)

        # Присоединяем события "delete" и "destroy" для выхода
        window.connect("delete_event", self.destroy_window)
  
        # Создаём область для рисования, устанавливаем размер и отлавливаем события кнопки
        self.drawingarea = gtk.DrawingArea()

        self.color = self.drawingarea.get_colormap().alloc_color(0, 65535, 0)

        self.drawingarea.set_size_request(200, 200)
        self.drawingarea.set_events(gtk.gdk.BUTTON_PRESS_MASK)
        self.drawingarea.connect("event",  self.area_event)
  
        # Добавляем обрасть рисования на окно, показываем обоих
        window.add(self.drawingarea)
        self.drawingarea.show()
        window.show()
  
def main():
    gtk.main()
    return 0

if __name__ == "__main__":
    ColorSelectionExample()
    main()

Предыдущая страница На уровень выше  Следующая страница
9.12. Календарь (gtk.Calendar) К оглавлению  9.14. Выбор файла (gtk.FileSelection)

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

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

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