2016-11-23 1 views
2

안녕하세요 제가 파이썬과 GTK + 3 개발에 새로 온 사람 행의 다른 색상으로 문제를 해결합니다. Gtk를 사용하여 GUI를 만들려고합니다 + 3 Gtk.TreeView가 포함되어 있습니다. TreeView의 이상한 레코드를 다른 색상으로 표시하려고하지만 항상 실패합니다. 나는 인터넷과 StackOverFlow 전체를 검색하지만 도움이되는 것을 찾지 못했습니다. 그래서 너를 도와달라고 간청한다. i.m Python을 사용하여 3.4.3. 미리 감사드립니다!파이썬 3 GTK + 3 - 트 리뷰 및

#!/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- :

내 기술로 코드 수정 to-alternate-light-dark-rows-in-gtktreeview # comment60118257_36047961 – B8vrede

답변

3

위젯의 스타일을 변경하려면 CSS를 사용하는 것이 더 좋지만, 다른 해결책이 있습니다.

는 배경 색상 값으로 ListStore에 다른 열을 추가하고 모두 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