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

时间:2019-04-23 12:47:00

标签: 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 { background-color: #67181B; }

因此,当我按“播放”时,播放器如下所示: enter image description here

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

因此,无论视频焦点放在其他按钮上,只要播放视频,我都想保持“播放”背景的变化。我希望现在更加清晰

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,不是我想的最好,但它正在起作用。如果有人有更好的东西,我会很高兴听到。 我制作了更多的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文件。