gtk(mm) 3 按钮背景颜色变化

Posted

技术标签:

【中文标题】gtk(mm) 3 按钮背景颜色变化【英文标题】:gtk(mm) 3 button background color change 【发布时间】:2012-01-21 11:38:46 【问题描述】:

我正在尝试将按钮的背景颜色更改为红色,但它似乎不起作用。 我粘贴示例代码。 如果有人可以告诉我如何修复我的代码,请提供帮助。

#include <gtkmm.h>

// g++ simple.cc -o simple `pkg-config gtkmm-3.0 --cflags --libs`

int  main(int argc, char *argv[])

    Gtk::Main kit(argc, argv);
    Gtk::Window  window;
    Gtk::Button  button("TEST");
    button.override_background_color(Gdk::RGBA("red"));
    window.add(button);
    window.show_all();
    Gtk::Main::run(window);
    return EXIT_SUCCESS;

更新: 好的,这就是我的解决方法:

mr_screen = Gdk::Screen::get_default();
mr_style_context = mp_window->get_style_context();
mr_css_provider = Gtk::CssProvider::create();
mr_css_provider->load_from_path(Glib::build_filename(m_glade_dir_path, "filename.css"));
mr_style_context->add_provider_for_screen(mr_screen, mr_css_provider, GTK_STYLE_PROVIDER_PRIORITY_USER);

filename.css 的内容是:

column-header .button 
    background-image: -gtk-gradient (linear,
        left top,
        left bottom,
        from (#51cccc),
        color-stop (0.5, darker (#51cccc)),
        to (#51cccc));

【问题讨论】:

我没有看到代码有什么问题,我认为它很可能与你的主题有关。如果您可以设置默认主题,您可以看到按钮颜色的变化。 没想到一个gtk3的主题能挡住一个按钮的背景被改变 按钮的背景至少在最新版本中可以更改。对我来说,让这个工作的关键是在添加提供者时指定 GTK_STYLE_PROVIDER_PRIORITY_USER。否则背景图像似乎优先于背景颜色 【参考方案1】:

确实,我学到了很多,CssProvider 是处理此类事情的正确方法。你不需要使用 glade,更好的是在你的代码中包含 css,就像这样

#include <gtkmm.h>

Gtk::Button* button = new Gtk::Button("Test");
Glib::RefPtr<Gtk::CssProvider> css_provider = Gtk::CssProvider::create();
css_provider->load_from_data(
    "button background-image: image(cyan);\
     button:hover background-image: image(green);\
     button:active background-image: image(brown);");
button->get_style_context()->add_provider(
    css_provider, GTK_STYLE_PROVIDER_PRIORITY_USER);

您必须处理背景图像,因为背景颜色与默认背景图像重叠,因此不会更改。 我的智慧来自Ruby-GNOME2

【讨论】:

您知道在哪里可以找到任何类型的文档吗?即使我认为我必须使用 CSS 进行简单的 bg 颜色更改,我应该如何发现我必须使用背景图像而不是背景颜色? @Klaus 在之前的搜索中,我在 GTK+ 文档中找到了一些信息,参见 developer.gnome.org/gtk3/stable/chap-css-overview.html> 和 developer.gnome.org/gtk3/stable/chap-css-properties.html>【参考方案2】:

我没有使用c++的经验,但是我使用python,在python中你必须这样做:

button.override_background_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(1.0 , 0.0 , 0.0, 1.0))

也许在 C++ 中你必须这样做

button.override_background_color(GTK_STATE_FLAGS_NORMAL, Gdk::RGBA(1.0 , 0.0 , 0.0, 1.0));

【讨论】:

您好,感谢您的回复。我们发现问题都在主题中,唯一的方法是使用 css 并加载它。我将搜索解决方案并使用结果更新问题。

以上是关于gtk(mm) 3 按钮背景颜色变化的主要内容,如果未能解决你的问题,请参考以下文章

我的应用程序忽略按钮背景颜色的任何变化

GTK4 设置 GtkInfoBar背景颜色

GTK4 设置 GtkInfoBar背景颜色

如何增加按钮背景颜色变化的时间

使按钮的背景颜色在单击后更改并保持不变

如何在 GTK 和 Python 中获取小部件的背景颜色?