使用GTK3和Python的红色到绿色进度条

时间:2014-01-17 23:10:11

标签: python gtk gtk3

所以在这里我试图制作一个红色为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)

1 个答案:

答案 0 :(得分:0)

试着看看如何在gtk小部件上绘制cairo表面:http://www.tortall.net/mu/wiki/PyGTKCairoTutorial

也许您可以将它与现有代码一起使用!