在 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");
}
}
你会得到这样的东西:
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");
}
}
你会得到这样的东西: