Gtk.CssProvider 在 Gtk3 Python3 中不起作用?

Posted

技术标签:

【中文标题】Gtk.CssProvider 在 Gtk3 Python3 中不起作用?【英文标题】:Gtk.CssProvider not working in Gtk3 Python3? 【发布时间】:2020-05-31 15:19:44 【问题描述】:

我正在尝试在 Fedora 32 中使用来自 gi.repository 的 Gtk3 在 python 3 中设置样式,但它什么也没做。

我曾经在 Gtk2 和 python2 中使用

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

这很好用。

现在,在 Python 3 中使用来自 gi.repository 的 Gtk3 我尝试了这个,只是为了使背景变红。

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 样式。

【问题讨论】:

【参考方案1】:

除非您使用 GTK

如果你想匹配一个 GtkWindow,你必须使用 window 选择器,as the documentation describes。

您还想将Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION 用于您的应用程序引入的样式,无论是通过编程方式还是通过自定义资源; USER 优先用于用户提供的 CSS 文件。

【讨论】:

原来如此,谢谢。我怎么知道元素名称“翻译”? 选择器总是记录在每个类的 API 参考中。

以上是关于Gtk.CssProvider 在 Gtk3 Python3 中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

一串两种颜色

如何为选定的文本设置突出显示颜色

CSS文件中的Gtk3键绑定

如何在 GTK3 中禁用按钮

GTK3 在按钮标签中换行

将 cairo 与 gtk3 一起使用