如何在GTK应用程序(python)中选择性地应用不同的样式表?

问题描述 投票:0回答:1

假设我有下一个代码

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)。

我的实例:

With system theme Adwaita - fine and using theme With system theme Adwaita dark - is fine too But with any another theme - it ignored

如果我使用 self.style_provider.load_from_path("/usr/share/themes/"+CURRENT_THEME+"/gtk-3.0/gtk.css") 我有所有元素的工作主题,但我的自定义 css 被加载覆盖主题。

With self.style_provider.load_from_path - theme applied to window, but my custom CSS ignored

我尝试了我所知道的一切 - 但没有成功。

函数 Gtk.StyleContext.add_provider_for_display() - 对整个窗口应用 CSS 我只需要将某些 CSS 应用于某些元素,而不触及其他元素。

可能有一些方法只是添加样式,例如

self.box4.add_style("{background-color: red;border: 1px solid green;}")
gtk gtk3 pygtk
1个回答
0
投票

只是不要使用

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')
© www.soinside.com 2019 - 2024. All rights reserved.