使用python在GtkTreeview中更改所选项目颜色

Jon*_*Jon 6 python gtk user-interface pygtk gtktreeview

我有一个对话框,其中包含pygtk.treeview,用于按优先级列出任务.每行具有基于该优先级设置的背景颜色,因此例如最高优先级具有浅红色背景.

行选择颜色不容易改变.我可以使用它来设置它treeview.modify_base(gtk.STATE_SELECTED, "#C4C4C4"),但没有颜色与用于增强优先级概念的颜色很好地配合.

我有想法将选择颜色更改为用作正常行背景的颜色的稍暗版本,因此在上面的示例中,这将是更深的红色.我尝试调用上面的函数来响应treeselection的changed信号,它可以工作,但是闪烁很重.

另一个想法是将选择更改为透明,并在其周围添加边框,但据我所知,这是不可能的.

  1. 如何在没有闪烁的情况下以上述方式更改选择颜色?
  2. 我可以通过在行周围只有一个边框来更改显示选择吗?

注意:我知道这违反了用户选择的主题.我觉得我有充分的理由.具有颜色指示的优先级使其可以立即识别.选择颜色隐藏了这一点.如果您有其他建议,我向他们开放,但需要保留用户识别优先级的便利性.

det*_*tly 2

您可以在最左侧添加一个单独的 pixbuf 单元(例如,与小图标大小相同)以指示选择。选定的行可以用用于背景的颜色的更“实心”(饱和)版本来填充它。例如。如果您使用粉红色背景作为高优先级,则可以使用红色作为选择指示器。或者您可以使用图标。

要使用颜色填充方法来实现此目的:

  1. 按照 Tobias 的建议禁用内置突出显示(“使 STATE_SELECTED 颜色与 STATE_NORMAL 相同”)。
  2. 创建一个基于gtk.gdk.Pixbuf它的小部件,允许您创建一个纯色区域,也许使用该fill方法。
  3. 使用CellRendererPixbuf作为“选择”单元格。

然后,您可以在选择更改时对“选择单元格”进行着色或取消着色,以指示选择了哪一行,或显示图标(例如股票代码)。

请注意,我还没有实现这一点,这只是一个想法。它与通常的 GTK 选择指示有很大不同,因此(显然)请自行判断它是否可用。