如何给 GtkEventBox 一个透明背景?

Posted

技术标签:

【中文标题】如何给 GtkEventBox 一个透明背景?【英文标题】:How Do I Give a GtkEventBox a Transparent Background? 【发布时间】:2011-06-07 22:42:55 【问题描述】:

在 GTK 对话框中,我有一个 GtkLabel 包装在 GtkEventBox 中,以便它可以接收点击事件(导航到网页以获取更多信息)。从功能上来说,它的效果很好。

但是,当我将标签添加到事件框时,标签的背景不再透明——标签现在具有默认的窗口背景颜色。这对我不起作用,因为我正在绘制的窗口有一个背景位图,并且缺乏透明度使它看起来很傻。

当 GtkLabel 添加到 GtkEventBox 时,我需要做些什么来保持 GtkLabel 的背景透明?

GdkColor color;
gdk_color_parse("blue", &color);
GtkStyle* linkstyle = gtk_style_new();
linkstyle->fg[GTK_STATE_NORMAL] = color;
GtkWidget* learnmorebox = gtk_event_box_new();
GtkWidget* learnmore = gtk_label_new("More Info");
gtk_widget_set_style(GTK_WIDGET(learnmore), GTK_STYLE(linkstyle));
gtk_container_add(GTK_CONTAINER(learnmorebox), learnmore);
gtk_widget_set_events(learnmorebox, GDK_BUTTON_PRESS_MASK);
g_signal_connect(G_OBJECT(learnmorebox), "button_press_event", G_CALLBACK(learn_more), NULL);

我怀疑我可以在 GtkStyle 中设置一些东西,但还没有发现任何有用的东西。

【问题讨论】:

我认为GTK+ 3修复了背景颜色变化的问题。 【参考方案1】:

GtkEventBox 通过创建一个新的 X 窗口来接收事件。默认情况下,它使用输入/输出窗口。调用gtk_event_box_set_visible_window 使窗口不可见(并且只能输入。)

【讨论】:

见my question。你有什么想法?问题是,如果您使窗口不可见,则将鼠标悬停在标签上时将无法更改光标。有什么解决方法吗?

以上是关于如何给 GtkEventBox 一个透明背景?的主要内容,如果未能解决你的问题,请参考以下文章

如何在非透明背景上创建透明文本

C#程序设计窗体如何将导入的图片背景变成透明?

CSS IE背景透明的问题

元素实现背景透明,文字不透明方法

怎么把图片背景变成透明

unity3d 如何将贴图的黑色背景变为透明