Изменение выбранного пункта раскрашивает GtkTreeview с помощью Python

У меня есть диалоговое окно, которое содержит pygtk.treeview для списка задач приоритетом. Каждой строке установили цвет фона на основе того приоритета, таким образом, например, самый высокий приоритет имеет светло-красный фон.

Цвет выделения строки не настолько легко изменить. Я могу установить его использование treeview.modify_base(gtk.STATE_SELECTED, "#C4C4C4"), но никакие цвета не работают хорошо с цветами, используемыми для улучшения понятия приоритета.

У меня была идея изменить цвет выделения, чтобы быть немного более темной версией цвета, используемого в качестве нормального фона строки, таким образом, в примере выше, который будет более темно-красным. Я пытался вызвать функцию выше в ответ на treeselection's changed сигнал, и это работает, но с тяжелым мерцанием.

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

  1. Как я могу изменить цвет выделения в пути, описанном выше без мерцания?
  2. Я могу измениться, показывают выбор при наличии только границы вокруг строки?

Примечание: Я знаю, что это нарушает тему, выбранную пользователем. Я чувствую, что у меня есть серьезное основание для него. Указание на приоритет цветом делает его немедленно опознаваемым. Цвет выделения скрывает это. Если у Вас есть альтернативные предложения, я открыт для них, но это должно сохранить простоту, в которой пользователь может определить приоритет.

6
задан gpoo 23 January 2013 в 04:37
поделиться

2 ответа

Вы можете добавить отдельную ячейку pixbuf (скажем, такого же размера, как маленький значок) в крайнее левое положение, чтобы указать выбор. Выбранные строки можно заполнить более «сплошной» (насыщенной) версией цвета, используемого для фона. Например. если вы используете розовый фон для высокого приоритета, вы можете использовать красный для индикатора выбора. Или вы можете использовать значок.

Чтобы реализовать это с помощью метода заливки цветом:

  1. Отключите встроенное выделение в соответствии с предложением Тобиаса («сделайте цвет STATE_SELECTED идентичным STATE_NORMAL»).
  2. Создайте виджет на основе gtk.gdk.Pixbuf , который позволяет создавать сплошную цветную область, возможно, используя метод fill .
  3. Используйте CellRendererPixbuf для своей ячейки «выбора».

Затем вы можете раскрасить или обесцветить «ячейку выбора» при изменении выбора, чтобы указать, какая строка выбрана, или отобразить значок (например, символ акций).

Обратите внимание, что я этого не реализовал, это просто идея. Он значительно отличается от обычного указания выбора GTK, поэтому (очевидно) используйте свое суждение относительно того, можно ли его использовать.

2
ответ дан 17 December 2019 в 18:09
поделиться

Не уверен, что вы подразумеваете под мерцанием. Для границы потребуется подкласс TreeView.

Я бы сделал цвет STATE_SELECTED идентичным STATE_NORMAL, чтобы отключить встроенную подсветку. Затем установить data_func для каждого столбца и изменить некоторый цвет на рендере ячейки в зависимости от того, находится ли она в выделении или нет.

Вы, вероятно, уже делаете это для своего приоритета, поэтому просто умножьте цвет на что-нибудь, чтобы выделить строку.

0
ответ дан 17 December 2019 в 18:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: