2016-11-23 20 views
2

こんにちは、私はpythonとGtk + 3の新機能です。 Gtk.TreeViewを含むGtk + 3を使ってGuiを作成しようとしています。私は別の色でTreeViewの奇妙なレコードを表示しようとしていますが、私はいつも失敗します。私はインターネットとStackOverFlowのすべてを検索しますが、何か役に立つものは見つかりませんでした。だから私はあなたに助けを求めます。 i.m Pythonを使用する3.4.3。前もって感謝します!Python 3とGtk + 3 - TreeViewと行の代替色の問題

#!/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() 
+0

GTK + 3.18以降で問題になるようですが、このコメントhttp://stackoverflow.com/questions/36002296/how-に従って代替光 - 暗 - 行 - gtktreeview#comment60118257_36047961 – B8vrede

答えて

3

ウィジェットのスタイルを変更するにはCSSを使用する方がよいはずですが、別の解決策があります。

ListStoreの別の列を背景色の値で追加し、属性「background」を両方のCellRendererTextに追加します。この方法では、すべての行がListStoreからバックグラウンドプロパティを回復します。各行に異なる色を使用する必要があります。

これは私のテクニックで修飾し、あなたのコードです:

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() 
+0

それは魅力のように多くの感謝のように動作します! – Bgo