Gtk.CssProvider在Gtk3 Python3中无法使用?

问题描述 投票:0回答:1

我试图在Python3中用Gtk3设置风格,从 gi.repository 中,但它什么都不做。

我曾经在Gtk2和python2中用以下方法来实现这个功能

settings = gtk.settings_get_for_screen(gdk.screen_get_default())
gtk.rc_parse_string(...) 
gtk.rc_reset_styles(settings)

这工作很好。

现在,在Python 3中,使用Gtk3从 gi.repository 我试过了,只是把背景变成红色。

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk as gtk
from gi.repository import Gdk as gdk
....

class Ave:
    ...
    def __init__(self):
        css_provider = gtk.CssProvider()
        css_provider.load_from_data(b'GtkWindow { background-color: #ff0000; }')
        screen = gdk.Screen.get_default()
        gtk.StyleContext.add_provider_for_screen(screen, css_provider, gtk.STYLE_PROVIDER_PRIORITY_USER)
        ...

Ave()
gtk.main()

我也试过用 css_provider.load_from_path('./ave_style.css') 没有成功(程序甚至抱怨如果 ave_style.css 有错误,所以它被加载。我甚至尝试用 gtk.STYLE_PROVIDER_PRIORITY_APPLICATION.

然而,什么都没有发生。该程序完全忽略了 CSS 样式。

python css python-3.x gtk3
1个回答
1
投票

除非你使用的是GTK < 3.20,否则这段CSS是无效的。

如果你想匹配一个GtkWindow,你必须使用GtkWindow中的 window 选择器。如文件所述.

你还想使用 Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION 用于您的应用程序引入的样式,无论是以程序方式还是以自定义资源方式引入的样式。USER 优先级为用户提供的CSS文件。

© www.soinside.com 2019 - 2024. All rights reserved.