GTK 中的 CSS - 在单击按钮时更改背景颜色

标签 css c gtk

我正在尝试使用 GTK 制作应用程序并使用 CSS 对其进行样式设置。我需要在点击时更改按钮背景。我需要这个来构建视频播放器。当我按“播放”时,我想通过更改“播放”按钮背景来标记该视频正在播放,当我按“暂停”时,我想“播放”按钮更改回默认值,“暂停”按钮更改背景。当按下“停止”时,两个背景都应该回到默认状态。做出这种行为的最佳方式是什么?

我找到了函数 gtk_widget_override_background_color,但它从 3.16 版开始就被弃用了,不应在新编写的代码中使用。 我也在 css 中尝试过 button:focus 但它无法正常工作。它确实会在单击时更改背景颜色,但是当我单击不应影响背景的按钮(例如更改音量)时,背景会更改为默认值。

编辑。 我可能会以一种误导的方式问这个问题。 button:focus 按预期工作,但并不完全符合我的需要。让我解释一下示例: 1. 在开始时(选择视频后)我有黑屏和消息“按下播放” enter image description here

  1. 现在我按下播放键。播放按钮在 css 中添加了焦点 来自 C 的代码: gtk_widget_set_name(GTK_WIDGET(play_button), "play_button_1");

在 CSS 中:

button#play_button_1:focus { 背景色:#67181B; }

所以当我按下“播放”时,播放器看起来像这样: enter image description here

  1. 在我只使用“播放”、“暂停”和“停止”按钮之前它工作正常。但是当我按“+”或“-”(用于音量控制)时,“播放”按钮失去焦点,看起来像这样(视频仍在播放,图片上没有焦点在“-”按钮上,它悬停.截图上没有coursor): enter image description here

所以我想要实现的是只要视频正在播放就保持“播放”背景发生变化,而不管其他按钮的焦点如何。我希望现在更清楚了

最佳答案

我找到了解决方案,虽然不是我认为的最佳解决方案,但它确实有效。如果有人有更好的东西,我会很高兴听到。 我制作了更多的 css 文件(应触发背景更改的每个功能的特定文件)。因此,例如,当我有“播放”按钮时,我制作了文件 play.css:

button#play_button_1 {
background-color: #67181B;
}

button#pause_button_1 {
background-color: #D5D6DB;
}

还有我添加的按钮功能

  GtkCssProvider *provider;
  GdkDisplay *display;
  GdkScreen *screen;

  provider = gtk_css_provider_new ();
  display = gdk_display_get_default ();
  screen = gdk_display_get_default_screen (display);
  gtk_style_context_add_provider_for_screen (screen, GTK_STYLE_PROVIDER   (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);

  const gchar* path_to_css = "play.css";
  GError *error = 0;
  gtk_css_provider_load_from_file(provider, g_file_new_for_path(path_to_css), &error);

然后我不得不对暂停按钮执行相同的操作(对其他文件),并在按下“停止”按钮时再次加载初始 css 文件。

关于GTK 中的 CSS - 在单击按钮时更改背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55811589/

相关文章:

javascript - "Drop Up"jQuery 中的菜单问题

c - `((void (*)())0x1000)();` 是什么意思?

c - gets() 和 puts() 显示我没有输入的字符

python - 如何在 OSX 上安装 python-gtk2、python-webkit 和 python-jswebkit

javascript - html javascript 有 2 个 div 并排

html - 如何实现多行 flexbox?

css 过滤器获取图像 "bluescale"?

c - 为什么不能在函数参数列表中使用 alloca?

c/gtk 将结构体转换为 GtkWindow 类型

使用 GTK 创建新文件