提问人:ntfs1984 提问时间:10/28/2023 更新时间:10/29/2023 访问量:17
如何在GTK应用程序(python)中有选择地应用不同的样式表?
How to selectively apply different stylesheets in GTK application (python)?
问:
假设我有下一个代码
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,则忽略当前主题。
我的现场示例:
使用系统主题 Adwaita - 很好并使用主题 使用系统主题 Adwaita dark - 也可以 但是对于任何其他主题 - 它被忽略了
如果我使用 self.style_provider.load_from_path(“/usr/share/themes/”+CURRENT_THEME+“/gtk-3.0/gtk.css”) 我有所有元素的工作主题,但我的自定义 css 被加载的主题覆盖。
self.style_provider.load_from_path - 主题应用于窗口,但我的自定义 CSS 被忽略了
我尝试了我所知道的一切——但没有成功。
函数 Gtk.StyleContext.add_provider_for_display() - 将 CSS 应用于整个窗口 我只需要将某些 CSS 应用于某些元素,而不触及另一个元素。
可能有一些方法只是为了添加样式,比如
self.box4.add_style("{background-color: red;border: 1px solid green;}")
答:
0赞
Kripto
10/29/2023
#1
只是不要使用 .您可以为每个小部件单独添加提供程序,如下所示: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')
评论