Виджет выбора цвета предназначен для интерактивного выбора цвета пользователем. Этот составной виджет позволяет пользователю выбирать цвет тройками параметров: 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, “Пример окна выбора цвета” показывает программу в действии:
Исходный код 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) |