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

时间:2017-08-22 00:04:12

标签: css python-2.7 windows-10 gtk3 msys2

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

cross-domain components

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

截图

Screenshot with the problem

我在Windows 10上使用Python 2.7.13和GTK + 3.22安装了所有更新,并通过MSYS2使用infobar { background-color: yellow; } 安装了所有更新。

1 个答案:

答案 0 :(得分:2)

来自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()