我希望获得窗口小部件的正常背景颜色(在这种情况下为GtkHeaderBar
)。我正在使用
style = self.get_titlebar().get_style_context()
获得风格,
color = style.get_property("background-color", Gtk.StateFlags.NORMAL)
获取与该样式相关联的背景颜色。
但是它返回具有以下属性的Gkd.RGBA
对象:
Gdk.RGBA(red=0.000000, green=0.000000, blue=0.000000, alpha=0.000000)
但是如果我打开GTK Inspector,选择HeaderBar,然后转到样式属性,它会显示
background-color | rgb(57,63,63) | gtk-contained-dark.css:1568.29
我需要做些什么来获得这些相同的值?
编辑:
我正在试验GtkStyleContext.render_background()
,但我没有成功:
surfc = Cairo.ImageSurface (Cairo.FORMAT_ARGB32, 10, 10)
contx = Cairo.Context(surfc)
style = self.get_titlebar().get_style_context()
backg = Gtk.render_background(style, contx, 10, 10, 10, 10)
surfc.write_to_png("test.png")
生成的文件test.png
是rgba(0, 0, 0, 0)
图片。
答案 0 :(得分:3)
你应该看看用css修改背景颜色。有一个非常好的documentation。它可以与python一起使用
css_provider = Gtk.CssProvider()
css_provider.load_from_path('application.css')
Gtk.StyleContext.add_provider_for_screen(
Gdk.Screen.get_default(),
css_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
)
和css文件如:
GtkHeaderbar {
background-color:@theme_bg_color;
}
编辑:正如您所评论的那样,您不想修改背景颜色,而是检索它的值。您可以执行widget.get_style_context().get_background_color()
,它会返回Gdk.RGBA(red=0.913725, green=0.913725, blue=0.913725, alpha=1.000000)
。
但是,您应该注意,get_background_color()
已弃用,因为没有一个背景颜色。某些小部件使用渐变作为背景,因此它不是使用此方法的最佳解决方案。请参阅documentation以供参考。
答案 1 :(得分:1)
如果有人感兴趣,我认为问题出在这里:
backg = Gtk.render_background(style, contx, 10, 10, 10, 10)
虽然它应该是:
backg = Gtk.render_background(style, contx, 0, 0, 10, 10)
答案 2 :(得分:0)
您在正确的轨道上,但是有issue带有推荐的获取颜色的新方法。
recommended workaround
退回到已弃用的get_background_color()
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
import sys
window = Gtk.Window()
context = window.get_style_context()
# this one is buggy
color1 = context.get_property("background-color", Gtk.StateFlags.NORMAL)
print(color1)
# this is the deprecated version, but it is the recommended workaround
color2 = context.get_background_color(Gtk.StateFlags.NORMAL)
print(color2)
请注意,除非样式上下文已用
Gtk.StyleContext.save()
保存,否则不建议传递当前状态以外的状态。
因此,当前建议的获取小部件背景颜色的方法是
context = widget.get_style_context()
color = context.get_background_color(widget.get_state())
self
通常是一个Gtk小部件,它变成
context = self.get_style_context()
color = context.get_background_color(self.get_state())