假设我有下一个代码
css = b"""
.my_css
{
background-color: red;
}"""
self.style_provider = Gtk.CssProvider()
self.style_provider.load_from_data(css)
Gtk.StyleContext.add_provider_for_display(Gdk.Display().get_default(),self.style_provider,Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
self.box1 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
self.box2 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
self.box3 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
self.box4.get_style_context().add_class("my_css")
问题是 - 当我添加用于显示自定义 css 的提供程序时 - 另一个元素开始使用默认主题 Adwaita,并忽略当前主题(如果它不是 Adwaita 或 Adwaita-dark)。
我的实例:
如果我使用 self.style_provider.load_from_path("/usr/share/themes/"+CURRENT_THEME+"/gtk-3.0/gtk.css") 我有所有元素的工作主题,但我的自定义 css 被加载覆盖主题。
我尝试了我所知道的一切 - 但没有成功。
函数 Gtk.StyleContext.add_provider_for_display() - 对整个窗口应用 CSS 我只需要将某些 CSS 应用于某些元素,而不触及其他元素。
可能有一些方法只是添加样式,例如
self.box4.add_style("{background-color: red;border: 1px solid green;}")
只是不要使用
Gtk.StyleContext.add_provider_for_display
。您可以为每个小部件单独添加提供程序,如下所示:
cssProvider = Gtk.CssProvider()
cssProvider.load_from_data(css)
box.get_style_context().add_provider(cssProvider, Gtk.STYLE_PROVIDER_PRIORITY_USER)
box.add_css_class('b')