在 gtk 中的条目上显示密码按钮

har*_*wap 4 c gtk gtk3

gtk 有没有办法在条目右侧制作一个眼睛图标来显示密码?我知道有一种方法可以在条目下创建一个复选框来显示密码,但我希望按钮位于条目内部,而不是外部。简而言之:

我正在寻找的是这样的: 显示密码图标

...而不是这个:显示密码复选框

(很抱歉,我无法嵌入图像。该网站说我首先需要 10 个声誉。实际上,我曾经有近 300 个声誉,直到我因不喜欢攻击而被禁止。请在您不喜欢之前考虑一下,因为实际上只需要大约 20 个声誉即可永久禁止一年的用户。如果有人有足够的声誉来编辑问题并添加图像,请这样做)

Voj*_*fny 6

您可以使用函数将图标放入 Gtk.Entry set_icon_from_,例如set_icon_from_name

因此,您需要将图标设置为例如图标view-reveal-symbolic.symbolic,使其可单击set_icon_activatable,然后在信号处理程序中,icon-press您需要set_visibility来隐藏或显示文本(并将图标更改为类似view-conceal-symbolic.symbolic)。

所以 Gtk.Entry 代码可能如下所示

GtkWidget *entry = gtk_entry_new();
gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE);
gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry), 
                                  GTK_ENTRY_ICON_SECONDARY, 
                                  "view-reveal-symbolic.symbolic");
gtk_entry_set_icon_activatable(GTK_ENTRY(entry), GTK_ENTRY_ICON_SECONDARY, TRUE);
g_signal_connect(entry, "icon-press", G_CALLBACK (on_icon_press), NULL);
Run Code Online (Sandbox Code Playgroud)

和信号处理程序

void on_icon_press(GtkWidget *widget, gpointer data) {   
    gboolean visible = gtk_entry_get_visibility(GTK_ENTRY(widget));
    
    if (visible) {
        gtk_entry_set_visibility(GTK_ENTRY(widget), FALSE);
        gtk_entry_set_icon_from_icon_name(GTK_ENTRY(widget), 
                                          GTK_ENTRY_ICON_SECONDARY, 
                                          "view-reveal-symbolic.symbolic");
    } else {
        gtk_entry_set_visibility(GTK_ENTRY(widget), TRUE);
        gtk_entry_set_icon_from_icon_name(GTK_ENTRY(widget), 
                                          GTK_ENTRY_ICON_SECONDARY, 
                                          "view-conceal-symbolic.symbolic");
    }
}
Run Code Online (Sandbox Code Playgroud)

你会得到这样的结果:

在此输入图像描述 在此输入图像描述