您可以使用函数将图标放入 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)
你会得到这样的结果: