0
所以在这里我试图让一个进度条是0%红色,其颜色逐渐变化,直到100%绿色,但我不知道该怎么办它。红色到绿色进度条使用GTK3和Python
我试着通过一个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)