首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在GTK和Python中获取小部件的背景色?

如何在GTK和Python中获取小部件的背景色?
EN

Stack Overflow用户
提问于 2015-07-25 23:25:14
回答 3查看 4.1K关注 0票数 10

我想要获得小部件的正常背景颜色(在本例中是GtkHeaderBar )。我目前使用的是

代码语言:javascript
复制
style = self.get_titlebar().get_style_context()

来获得风格,并且

代码语言:javascript
复制
color = style.get_property("background-color", Gtk.StateFlags.NORMAL)

以获取与该样式关联的背景色。

但是,它会返回一个具有以下属性的Gkd.RGBA对象:

代码语言:javascript
复制
Gdk.RGBA(red=0.000000, green=0.000000, blue=0.000000, alpha=0.000000)

但是,如果我打开GTK Inspector,选择HeaderBar,然后转到样式属性,它会显示

代码语言:javascript
复制
background-color | rgb(57,63,63) | gtk-contained-dark.css:1568.29

我必须做什么才能得到这些相同的值?

编辑:

我正在试验GtkStyleContext.render_background(),但没有成功:

代码语言:javascript
复制
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)图像。

EN

回答 3

Stack Overflow用户

发布于 2015-07-26 06:20:59

你应该看看如何用css修改背景色。它有一个非常好的documentation。它可以与python一起使用

代码语言:javascript
复制
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文件,如:

代码语言:javascript
复制
GtkHeaderbar {
    background-color:@theme_bg_color;
}

EDIT:正如您所注释的,您不想修改背景颜色,但要检索它的值。您可以执行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

票数 5
EN

Stack Overflow用户

发布于 2018-01-31 21:14:51

如果有人感兴趣,我认为问题出在这里:

代码语言:javascript
复制
backg = Gtk.render_background(style, contx, 10, 10, 10, 10)

虽然它应该是:

代码语言:javascript
复制
backg = Gtk.render_background(style, contx, 0, 0, 10, 10)
票数 1
EN

Stack Overflow用户

发布于 2019-02-22 02:11:42

你是在正确的轨道上,但是有一个新的推荐方法来获取颜色的issue

recommended workaround将回退到已弃用的get_background_color()

代码语言:javascript
复制
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)

python/Gtk documentation

请注意,除非已使用Gtk.StyleContext.save()保存样式上下文,否则不建议传递当前状态以外的状态

因此,当前推荐的获取小部件背景色的方法是

代码语言:javascript
复制
context = widget.get_style_context()
color = context.get_background_color(widget.get_state())

通常,self是一个Gtk小部件,这变成了

代码语言:javascript
复制
context = self.get_style_context()
color = context.get_background_color(self.get_state())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31628065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档