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

标签 python user-interface gtk pygtk gtktreeview

我有一个对话框,其中包含用于按优先级列出任务的 pygtk.treeview。每行都根据优先级设置了背景颜色,例如,最高优先级的背景为浅红色。

行选择颜色不是那么容易改变的。我可以使用 treeview.modify_base(gtk.STATE_SELECTED, "#C4C4C4") 对其进行设置,但是没有一种颜色与用于增强优先级概念的颜色搭配得很好。

我想将选择颜色更改为用作普通行背景的颜色的稍微深一点的版本,因此在上面的示例中,这将是更深的红色。我尝试调用上面的函数来响应 treeselection 的 changed 信号,它可以工作,但是闪烁很厉害。

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

  1. 如何按上述方式更改选择颜色而不闪烁?
  2. 我可以通过仅在行周围添加边框来更改显示选择吗?

注意:我知道这违反了用户选择的主题。我觉得我有充分的理由。具有颜色指示的优先级使其立即可识别。选择颜色隐藏了这一点。如果您有其他建议,我愿意接受,但它需要保持用户可以轻松识别优先级。

最佳答案

您可以使用描述的方法here – 我已经对它进行了简短的测试,它可以正常工作而不会闪烁。基本上,诀窍是使用单元格渲染器的“标记”属性。不过有一个问题:如果您想使用此方法更改背景 颜色,则只会更改“实际”文本后面的背景,而不是整行。但是,如果您想更改 text 颜色(使用

我有以下 CellDataFunc(这是 C#,但我希望它仍然有用):

private void CellDataFunc(Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter) {
    Item item = (Item) model.GetValue (iter, 0);
    if(cell is CellRendererText) {
        int id = (int)column.GetData("colId");
        string text = "";
        switch(id) {
            case 0: text = item.Name;  break;
            case 1: text = item.Size; break;
            case 2: text = item.Time.ToString();  break;                
        }
        //(cell as Gtk.CellRendererText).Text = text;
        if(item.Highlight) {
            (cell as Gtk.CellRendererText).Markup = 
                            "<span background=\"red\">"+text+"</span>";
        } else {
            (cell as Gtk.CellRendererText).Markup = text;
        }
    }
}

关于python - 使用 python 在 GtkTreeview 中更改所选项目的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3099244/

相关文章:

python - 阻止 Sprite 离开 tkinter 窗口

python - 如何将 GEKKO 解决方案转换为浮子

python - 如何更新 SQLAlchemy 行条目?

c - 如何在接收 GtkTreeModel 的函数中使用 GtkTreeStore

perl - 如何将 GTK3 与 perl 一起使用?

python - 在 python 中为什么使用 except :

python - 将自定义 JS 添加到 Django 管理字段

java - actionPerformed 在展开窗口时触发

python - 我可以将 Twisted GTK Reactor 与 UDP 接收器一起使用吗?

python - 如何在 python 中使用 Gtk.Builder() 加载 UI 后设置应用程序标题?