所以在这里我试图制作一个红色为0%的进度条,它的颜色逐渐变化,直到绿色为100%,但我不知道该怎么做。
我尝试通过CssProvider重新定义内置的gtk.ProgressBar来完成它,但底层的CSS样式非常混乱,我无法让它工作 - 更不用说我无法设法混合颜色也是如此。
我考虑使用cairo从头开始绘制我自己的小部件,但我在网上找不到任何有关如何操作的指南。
目前我正在尝试在Ubuntu下完成这项工作,但独立于平台的解决方案绝对会更好。
编辑最终我用下面的代码解决了它。这是使用gtk.Table的解决方法。酒吧的背景没有着色(我试过了,但是不能给桌子本身一个背景颜色)。进度部分采用自上而下的渐变颜色着色,并具有3px圆角。虽然这个版本仍然是静态的,但我制作的slightly modified version可以是动态的(有限制)。
class mybar(gtk.Table):
def __init__(self, total, now, label):
super(mybar, self).__init__(1, total, True)
self.set_size_request(150,5) ## just set a size for it
self.show()
self.id = 'mybar'+str(id(self)) ## unique id for the css
self.set_name(self.id)
self.set_tooltip_text(u'%s: %d/%d' % (label, now, total)) ## Label: current/max
bar = gtk.Label()
bar.show()
p = now/float(total)
m = 0.7 ## this makes the colors darker, 1 for full brightness 0 for black
if p < 0.5:
r = m
g = p*2*m
elif p > 0.5:
r = (1-p)*2*m
g = m
else:
r = m
g = m
color = gdk.RGBA(r,g,0,1)
##print color.to_string() ## uncomment this to print the current color rgb to terminal
css = gtk.CssProvider()
css.load_from_data('''
@define-color barcolor %s;
#%s GtkLabel {
font:6px;
background:-gtk-gradient (linear, center top, center bottom, from (shade (@barcolor, 1.05)), color-stop (0.5, @barcolor), to (shade (@barcolor, 0.95)));
border-radius:3px;
}
''' % (color.to_string(), self.id) )
bar.get_style_context().add_provider(css, gtk.STYLE_PROVIDER_PRIORITY_APPLICATION )
self.attach(bar, 0, now, 0, 1)
答案 0 :(得分:0)
试着看看如何在gtk小部件上绘制cairo表面:http://www.tortall.net/mu/wiki/PyGTKCairoTutorial
也许您可以将它与现有代码一起使用!