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

问题描述 投票:0回答:1

我正在尝试使用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

所以我想要实现的是,只要视频正在播放,就可以保持“播放”背景的改变,无论是关注其他按钮。我希望现在更清楚了

css c gtk
1个回答
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文件。

© www.soinside.com 2019 - 2024. All rights reserved.