如何将 Gtk.InfoBar 的背景颜色更改为黄色?

Posted

技术标签:

【中文标题】如何将 Gtk.InfoBar 的背景颜色更改为黄色?【英文标题】:How to change the background-color of a Gtk.InfoBar to yellow? 【发布时间】:2017-08-22 00:04:11 【问题描述】:

默认背景颜色似乎是蓝色(来自 Adwaita 主题),即使我将消息类型设置为警告。我更喜欢使用 CSS。

example.py

# coding=utf-8

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

w = Gtk.Window()
ib = Gtk.InfoBar()

w.add(ib)
w.connect("delete-event", Gtk.main_quit)

provider = Gtk.CssProvider()
provider.load_from_path("style.css")

w.get_style_context()\
     .add_provider(provider, Gtk.STYLE_PROVIDER_PRIORITY_USER)

w.show_all()
Gtk.main()

style.css

infobar 
    background-color: yellow;

截图

我在 Windows 10 上使用 Python 2.7.13 和 GTK+ 3.22 并安装了所有更新,并通过 MSYS2 使用pacman -Syyu 安装了所有更新。

【问题讨论】:

【参考方案1】:

来自Python Gtk API:

Gtk.InfoBar 有一个名为 infobar 的 CSS 节点。该节点可能会得到 样式类 .info、.warning、.error 或 .question 之一, 取决于消息类型。

默认情况下,Gtk.InfoBar 消息类型为 Gtk.MessageType.INFO,您的 style.css 文件应为,例如:

infobar.info 
    background-color: yellow;

这样您可以更具体地设置您正在设置的消息类型,但infobar 本身也可以工作。优点是您可以使用infobar.<messagetype> 为每种消息类型进行自定义设置。

编辑:

将接收 css 类的小部件更改为 Gtk.InfoBar 实例:

ib.get_style_context()\
     .add_provider(provider, Gtk.STYLE_PROVIDER_PRIORITY_USER)

编辑 2:

要将 CssProvider (StyleProvider) 作为一个整体添加到应用程序中,您可以使用 Gdk.Screen 类方法 Gdk.Screen.add_provider_for_screen(更多 info here)

更改代码以反映这些更改,您将拥有:

# coding=utf-8

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk

w = Gtk.Window()
ib = Gtk.InfoBar()

w.add(ib)
w.connect("delete-event", Gtk.main_quit)

provider = Gtk.CssProvider()
provider.load_from_path("style.css")

Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default (), provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)

w.show_all()
Gtk.main()

【讨论】:

@silviubogan 抱歉,我忘了设置小部件。检查编辑。 有效!但我想为我的整个程序创建一个全局 CSS 文件。如果您解释的技术是为我想要设置整个 CSS 文件样式的每个小部件关联,我该怎么做?

以上是关于如何将 Gtk.InfoBar 的背景颜色更改为黄色?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 SVG 的填充颜色更改为背景图像? [复制]

如何以编程方式将背景颜色从 android.support.design 更改为 MaterialButton

如何在开始滚动和透明后将角度材质工具栏背景颜色更改为白色?

如何将按钮的颜色更改为默认颜色

如何将 PNG 图像的背景和前景色更改为从颜色托盘中选择?

当用户在表格视图中向下滚动时,如何将 UINavigationBar 背景颜色从透明更改为红色