Python 3和Gtk + 3-TreeView和行的备用颜色存在问题 [英] Python 3 and Gtk+3 - issue with TreeView and alternate colors of rows
问题描述
我是python和Gtk + 3开发的新手.我正在尝试使用包含Gtk.TreeView的Gtk + 3创建Gui.我试图以不同的颜色显示TreeView的奇数记录,但我总是失败.我在整个互联网和StackOverFlow上进行了搜索,但没有找到任何有用的信息. 我正在使用Python 3.4.3.有人可以帮忙吗?
I'm new in python and Gtk+3 development. I'm trying to create a Gui with Gtk+3 which contains a Gtk.TreeView. I'm trying to show the odd records of the TreeView in different color but i always fail. I searched all over the internet and StackOverFlow but i didn't find something helpful. I'm using Python 3.4.3. Can someone help?
#!/usr/bin/env python3
# -*- coding: ISO-8859-1 -*-
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk
xim = [("Oranges", 5), ("Apples", 3), ("Bananas", 1), ("Tomatoes", 4), ("Cucumber", 1), ("potatoes", 10),
("apricot", 100)]
window = Gtk.Window()
window.connect("destroy", lambda q: Gtk.main_quit())
liststore = Gtk.ListStore(str, int)
for i in range(len(xim)):
liststore.append(xim[i])
treeview = Gtk.TreeView(model=liststore)
window.add(treeview)
treeviewcolumn = Gtk.TreeViewColumn("Item")
treeview.append_column(treeviewcolumn)
cellrenderertext = Gtk.CellRendererText()
treeviewcolumn.pack_start(cellrenderertext, True)
treeviewcolumn.add_attribute(cellrenderertext, "text", 0)
treeviewcolumn = Gtk.TreeViewColumn("Quantity")
treeview.append_column(treeviewcolumn)
cellrenderertext = Gtk.CellRendererText()
treeviewcolumn.pack_start(cellrenderertext, True)
treeviewcolumn.add_attribute(cellrenderertext, "text", 1)
css_provider = Gtk.CssProvider()
css = """
GtkTreeView row:nth-child(odd){background-color: #ccc}
"""
css_provider.load_from_data(css.encode())
Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),
css_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
window.show_all()
Gtk.main()
推荐答案
我知道最好使用CSS来更改小部件的样式,但是还有另一种可行的解决方案.
I know it should be better to use CSS to change the style of widgets, but there's another solution that works.
在ListStore中添加具有背景色值的另一列,并将属性"background"添加到两个CellRendererText中.这样,每一行都将从ListStore恢复背景属性.您应该为每行使用不同的颜色.
Add another column in the ListStore with the background color value and add the attribute "background" to both CellRendererText. In this way, every row will recover the background property from the ListStore. You should use a different color for each row.
这是用我的技术修改过的代码:
This is your code modified with my technique:
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk
xim = [("Oranges", 5), ("Apples", 3), ("Bananas", 1), ("Tomatoes", 4), ("Cucumber", 1), ("potatoes", 10),
("apricot", 100)]
window = Gtk.Window()
window.connect("destroy", lambda q: Gtk.main_quit())
liststore = Gtk.ListStore(str, int, str)
for i in range(len(xim)):
if i % 2 == 0:
background_color = "#fff"
else:
background_color = "#bbb"
liststore.append(xim[i] + (background_color,))
treeview = Gtk.TreeView(model=liststore)
window.add(treeview)
treeviewcolumn = Gtk.TreeViewColumn("Item")
treeview.append_column(treeviewcolumn)
cellrenderertext = Gtk.CellRendererText()
treeviewcolumn.pack_start(cellrenderertext, True)
treeviewcolumn.add_attribute(cellrenderertext, "text", 0)
treeviewcolumn.add_attribute(cellrenderertext, "background", 2)
treeviewcolumn = Gtk.TreeViewColumn("Quantity")
treeview.append_column(treeviewcolumn)
cellrenderertext = Gtk.CellRendererText()
treeviewcolumn.pack_start(cellrenderertext, True)
treeviewcolumn.add_attribute(cellrenderertext, "text", 1)
treeviewcolumn.add_attribute(cellrenderertext, "background", 2)
window.show_all()
Gtk.main()
这篇关于Python 3和Gtk + 3-TreeView和行的备用颜色存在问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!