在 gtk 中显示密码按钮

Show password button on entry in gtk

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

我要找的是这个: show password icon

...而不是这个:show password checkbox

(对不起,我不能嵌入图片。该网站说我首先需要 10 个声望。实际上我曾经有将近 300,直到我被禁止进行不喜欢的攻击。请在你不喜欢之前三思,因为它确实是只需要 ~20 就可以永久禁止一个长达一年的用户。如果有人有足够的声誉来编辑问题并添加图片,请这样做)

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

因此您需要将图标设置为例如 view-reveal-symbolic.symbolic 图标,使用 set_icon_activatable and then in the signal handler for the icon-press event you need to 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);

和信号处理程序

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");
    }
}

你会得到这样的东西: