2016-10-03 49 views
0

我想用一個顏色字段填充一個treeview單元格並尋找一個很好的方法來做到這一點。python gtk3用顏色字段創建treeview單元格

以下是我已經嘗試:

#!/usr/bin/env python3 
#-*- coding: utf-8 -*- 

import gi 
gi.require_version('Gtk', '3.0') 
from gi.repository import Gtk 
from gi.repository import Gdk, GdkPixbuf 


window = Gtk.Window() 
window.set_default_size(300, 100) 
window.connect("delete-event", Gtk.main_quit) 
window.set_title("CellRendererPixbuf in GTK3") 

box = Gtk.HBox() 
window.add(box) 

liststore = Gtk.ListStore(GdkPixbuf.Pixbuf) 
pix = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 10, 10) 
liststore.append([pix]) 
treeview = Gtk.TreeView(model=liststore) 
renderer_pixbuf = Gtk.CellRendererPixbuf().new() 
column_pixbuf = Gtk.TreeViewColumn("Color", renderer_pixbuf, stock_id=0) 
treeview.append_column(column_pixbuf) 

box.pack_start(treeview, True, True, 0) 

window.show_all() 
Gtk.main() 
+0

我認爲這個問題是類似於http:// stackoverflow.com/questions/38771311/drawing-a-custom-gdkpixbuf-using-gtk3-and-cairo – oxidworks

回答

1

解決方案

最後我得到了現在的工作:

#!/usr/bin/env python3 
#-*- coding: utf-8 -*- 

import gi 
gi.require_version('Gtk', '3.0') 
from gi.repository import Gtk 
from gi.repository import GdkPixbuf 

window = Gtk.Window() 
window.set_default_size(300, 100) 
window.connect("delete-event", Gtk.main_quit) 
window.set_title("CellRendererPixbuf in GTK3") 

box = Gtk.HBox() 
window.add(box) 

# creat liststore 
liststore = Gtk.ListStore(str, GdkPixbuf.Pixbuf) 

pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, False, 8, 32, 16) 
pixbuf.fill(0xff0000) 
liststore.append(["Green", pixbuf]) 

pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, False, 8, 32, 16) 
pixbuf.fill(0x00ff00) 
liststore.append(["Blue", pixbuf]) 

pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, False, 8, 32, 16) 
pixbuf.fill(0x000000) 
liststore.append(["Black", pixbuf]) 

# create treeview 
treeview = Gtk.TreeView(model=liststore) 

# create text column 
renderer_text = Gtk.CellRendererText() 
column_text = Gtk.TreeViewColumn("Text", renderer_text, text=0) 
treeview.append_column(column_text) 

# create pixbuf column 
renderer_pixbuf = Gtk.CellRendererPixbuf().new() 
column_pixbuf = Gtk.TreeViewColumn("Color", renderer_pixbuf, pixbuf=1) 
treeview.append_column(column_pixbuf) 

# pack 
box.pack_start(treeview, True, True, 0) 
window.show_all() 
Gtk.main()