不要在 gtk3 中得到 css with glade to work

Dont get css in gtk3 with glade to work

我想加载一个空地文件并更改所有切换按钮的颜色( class "GtkToggleButton" ,我想更改 "pressed" 颜色)切换按钮是空地文件中的许多子元素之一。 这里是我用来加载 .css 和 .glade:

的 C 代码片段
void on_minute_pressed(GtkWidget *button)
{
    GtkCssProvider *cssProvider = gtk_css_provider_new ();
    gtk_css_provider_load_from_path(cssProvider,"./test.css",NULL);
    GtkBuilder *builder = gtk_builder_new();
    gtk_builder_add_from_file (builder, "minute_dialog.glade", NULL);
    GtkWidget       *window= GTK_WIDGET(gtk_builder_get_object(builder, "MinuteWizard"));
    gtk_window_set_transient_for (window,main_window);
    gtk_style_context_add_provider(gtk_widget_get_style_context(window),cssProvider,GTK_STYLE_PROVIDER_PRIORITY_USER);
    gtk_builder_connect_signals(builder, NULL);

    gtk_widget_show(window);
    g_object_unref(builder);
}

这里是我目前使用的 .css:

.button {
  padding: 30;
  background-color: shade (@bg_color, 55);
}

togglebutton entry {
  color: 900185;
}

button:active {
  background-color: #0274d9;
}

当前发生的情况:新的 window 负载很好,但似乎我在 .css 中写入什么并不重要,它不会改变 [=30] 的外观=]-元素。我可以看到 .css 已加载,因为我收到如下警告:

Gtk-WARNING **: Theme parsing error: test.css:2:13: Not using units is deprecated. Assuming 'px'.

怎么了?我需要将 .css 分别应用于每个子窗口吗?

试试这个

.button {
  padding: 30px; /* px unit added */
  background-color: shade (@bg_color, 55);
}
    
.togglebutton .entry {
  color: #900185; /* # added */
}
    
.button:active {
  background-color: #0274d9;
}
<button class="button">aaaa</button>
<button class="button togglebutton"><span class="entry">aaaa</span></button>

建议列表太长,无法作为评论:

  • 会不会是您在 ~/.themes 中安装了另一个版本的主题 CSS?如果是这样,该主题将取代 /usr/share/themes.

  • 中的主题
  • 自XDG以来,CSS的位置还有另一种可能性:来自dev documentation(下面的$XDG_CONFIG_HOME通常是~/.config ):

In addition, certain files will be read when GTK+ is initialized. First, the file $XDG_CONFIG_HOME/gtk-3.0/gtk.css is loaded if it exists. Then, GTK+ loads the first existing file among XDG_DATA_HOME/themes/theme-name/gtk-VERSION/gtk.css, $HOME/.themes/theme-name/gtk-VERSION/gtk.css, $XDG_DATA_DIRS/themes/theme-name/gtk-VERSION/gtk.css and DATADIR/share/themes/THEME/gtk-VERSION/gtk.css, where THEME is the name of the current theme (see the #GtkSettings:gtk-theme-name setting), DATADIR is the prefix configured when GTK+ was compiled (unless overridden by the GTK_DATA_PREFIX` environment variable), and VERSION is the GTK+ version number. If no file is found for the current version, GTK+ tries older versions all the way back to 3.0.

  • 您的另一个解决方案可能是使用 GtkCssProvider 特定小部件样式的界面。

一个有趣的参考是 Installing, Obtaining, and Making GTK Themes

好的,我自己发现了问题所在:

根据 gtk_style_context_add_provider css 的文档,提供程序不会继承到子样式上下文。

因此要么需要将 css 应用于每个单独的小部件,要么使用 gtk_style_context_add_provider_for_screen 更改整个屏幕的 css:

gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), GTK_STYLE_PROVIDER(cssProvider), GTK_STYLE_PROVIDER_PRIORITY_USER);

尝试在 'style classes' 中为 Glade 中的小部件添加 class 名称: glade_screenshot_button_attr