1
我正在使用PyGTK,我想绘制一个CellRenderer内的东西,所以我使用了CellRendererPixbuff,它正在工作。唯一的问题是,如果该绘图具有透明度,则输出会很糟糕并混淆。PyGTK:CellRendererPixbuf和透明度
截图:http://postimage.org/image/f839ijd0/
我的代码:
def pixbufSqFromColor(color, size, roundR=0):## a rounded square with specified color
pmap = gdk.Pixmap(None, size, size, depth=24)
cr = pmap.cairo_create()
###
#cr.rectangle(0, 0, size, size)
#fillColor(cr, (255, 255, 255, 0))
###
cr.move_to(roundR, 0)
cr.line_to(size-roundR, 0)
cr.arc(size-roundR, roundR, roundR, 3*pi/2, 2*pi) ## up right corner
cr.line_to(size, size-roundR)
cr.arc(size-roundR, size-roundR, roundR, 0, pi/2) ## down right corner
cr.line_to(roundR, size)
cr.arc(roundR, size-roundR, roundR, pi/2, pi) ## down left corner
cr.line_to(0, roundR)
cr.arc(roundR, roundR, roundR, pi, 3*pi/2) ## up left corner
###
cr.close_path()
fillColor(cr, color)
####
pbuf = gdk.Pixbuf(gdk.COLORSPACE_RGB, True, 8, size, size)
colormap = gtk.gdk.colormap_get_system()
#colormap = self.get_screen().get_system_colormap()
#colormap = pmap.get_colormap()
pbuf.get_from_drawable(pmap, colormap, 0, 0, 0, 0, size, size)
return pbuf
#return gdk.Pixbuf.get_from_drawable(pmap, gdk.COLORSPACE_RGB, 0, 0, 0, 0, size, size)
而这正是该功能用于
groupNode = self.treestore.append((
-1,
group.enable,
pixbufSqFromColor(group.color, 50, 15),
group.title,
'',
))
和一些使用的功能在这里:
def setColor(cr, color):
## arguments to set_source_rgb and set_source_rgba must be between 0 and 1
if len(color)==3:
cr.set_source_rgb(color[0]/255.0,
color[1]/255.0,
color[2]/255.0)
elif len(color)==4:
cr.set_source_rgba(color[0]/255.0,
color[1]/255.0,
color[2]/255.0,
color[3]/255.0)
else:
raise ValueError('bad color %s'%str(color))
def fillColor(cr, color):
setColor(cr, color)
cr.fill()
谢谢,第二个解决方案是好的,但(apearantly)不完美。作为矢量绘图的截图,请参阅此截图:http://postimage.org/image/1dplqqls4/61343501/ – saeedgnu