【问题标题】:Dont get css in gtk3 with glade to work不要在 gtk3 中使用 glade 工作的 css
【发布时间】:2016-07-21 09:46:22
【问题描述】:

我想加载一个 glade 文件并更改所有切换按钮的颜色(类“GtkToggleButton”,我想更改“按下”颜色)切换按钮是其中的许多子子元素之一林间空地文件。 这里是我用来加载 .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;
}

当前发生的情况:新窗口加载很好,但似乎我在 .css 中写入的内容并不重要,它不会改变窗口元素的外观。我可以看到 .css 已加载,因为我收到如下警告:

Gtk-WARNING **: 主题解析错误: test.css:2:13: Not using units is 已弃用。假设为 'px'。

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

【问题讨论】:

  • Not using units is deprecated 来自旧的 CSS 文件,其中一些大小仅由数字指定,例如 border=1。当前的 gtk 版本要求将其指定为 1px。请注意,如果您的主题太旧,您可能会遇到 gtk 比 3.20 更新的问题!不过,它不应该影响您的主要问题。

标签: css c gtk3 glade


【解决方案1】:

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

根据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);

【讨论】:

  • 我遇到了同样的问题,你在哪里找到“当前 CSS 提供程序没有继承到子样式上下文。” ?
  • 来自方法的官方文档:developer.gnome.org/gtk3/stable/… ...我会将信息添加到我的答案中
【解决方案2】:

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

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

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

另外,某些文件会在 GTK+ 初始化时被读取。 首先,如果文件 $XDG_CONFIG_HOME/gtk-3.0/gtk.css 被加载 存在。然后,GTK+ 加载其中的第一个现有文件 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 和 DATADIR/share/themes/THEME/gtk-VERSION/gtk.css,其中 THEME 是 当前主题的名称(参见#GtkSettings:gtk-theme-name 设置),DATADIR 是 GTK+ 编译时配置的前缀 (除非被 GTK_DATA_PREFIX` 环境变量覆盖),和 VERSION 是 GTK+ 版本号。如果没有找到文件 当前版本,GTK+ 一直尝试旧版本回到 3.0。

  • 另一种解决方案可能是使用GtkCssProvider 接口来处理特定的小部件样式。

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

【讨论】:

  • 我没有文件夹“~/.themes”。我有“~/config/gtk-3.0”和“~/config/gtk-2.0”,但里面没有“gtk.css”。 $XDG_CONFIG_HOME 没有设置,所以我怀疑将使用默认值。所以我想我只使用默认主题。
  • 我已经在 C 代码中使用了 GtkCssProvider(参见上面的代码)。对于特定的小部件是否有不同的? ...实际上我不想建立一个完整的主题..我只想在切换按钮的“按下”和“未按下”之间有更多的对比,无论使用哪个主题。
【解决方案3】:

试试这个

.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>

【讨论】:

  • 按钮看起来还是一样 :( .. 我也试过颜色:红色/颜色:蓝色,但它没有任何改变。
  • 我已经更新了 sn-p。你在类名之前忘记了.
  • 感谢您的“。”提示,但仍然没有.. 似乎是与 gtk3 相关的问题。
  • 这个答案看起来像是假设问题是关于 HTML 的。
【解决方案4】:

尝试在 Glade 中的小部件的“样式类”中添加类名: glade_screenshot_button_attr

【讨论】:

    猜你喜欢
    • 2020-02-11
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多