Gtk.CssProvider()基于ID的选择器在Gtk3中是如何工作的?
我断断续续地摆弄这个已经有几天了,但似乎就是不能理解可能存在的问题。
本质上,我试图使用CSS样式声明来设计Gtk3中的一些GTK小部件的样式,这并不复杂,只是尝试通过其id/名称来确定特定元素的目标。Gtk.CssProvider()的GTK文档说明
#widgetname { background-color: #333333; }
应该可以作为名称设置为"widgetname"的小部件的有效选择器,但是我似乎无法使其工作。我最初以为是CSS没有加载,但我可以针对顶级小部件,如下所示:
GtkWindow { background-color: #333; }
它会将样式应用到窗口,我可以看到背景颜色已更改。我尝试将该名称用作两个不同类型的小部件(GtkEventBox、GtkTextView、GtkStatusBar、GtkBox)的ID,但基于ID的选择器似乎不起作用。
以下是我如何加载CSS的简短片段:
css = Gtk.CssProvider()
# css.load_from_file(file)
css.load_from_data('''
GtkWindow {
background-color: #333;
}
GtkEventBox {
background-color: #333;
}
#statusbarwrap, #textview_event_wrap, #box1 {
background-color: #333;
}
''')
style_context = self.get_style_context()
style_context.add_provider(
css,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
这里是GtkCssProviderhttps://developer.gnome.org/gtk3/3.7/GtkCssProvider.html
的文档该页面上的示例24(只需向下滚动一两页)显示#ID选择器有效,我正在为Glade中的小部件设置名称。
如有任何帮助,我们将不胜感激。
解决方案
我们可以使用‘gtk_WIDGET_SET_NAME()’为此小部件指定名称(ID)。
win = Gtk.Window()
win.set_name('main_window')
则"#Main_Window"可以用作CSS3中的ID选择符:
#main_window {
background-color: ...
}
如果您使用文本编辑器打开glade文件,您可以发现,widget的名称实际上标记为id,如下所示:
<object class="GtkWindow" id="window1">
请注意,小工具的名称不应包含*、#或>等特殊字符,这些字符是CSS语法的一部分。
相关文章