如何将 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 的背景颜色更改为黄色?的主要内容,如果未能解决你的问题,请参考以下文章