gtk entry实现明密文切换

实现明密文切换代码如下,注释清晰,编译方式:

gcc test.c `pkg-config --cflags --libs gtk+-3.0`

唯一需要注意的地方可能大家没有16x16的png图标,想办法自己p两张吧~~

#include <gtk/gtk.h>
 
static void cb_entry_icon_press(GtkWidget *entry)
{
    GError *error = NULL;
    GdkPixbuf *pixbuf = NULL;
	if (gtk_entry_get_visibility(GTK_ENTRY(entry))) {
		gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE);
		gtk_entry_set_icon_tooltip_markup(GTK_ENTRY(entry), 
								          GTK_ENTRY_ICON_SECONDARY, "显示密码");
        pixbuf = gdk_pixbuf_new_from_file("closeeye.png", &error);
        if (!pixbuf) {
            g_error_free(error);
        }
        gtk_entry_set_icon_from_pixbuf(GTK_ENTRY(entry), GTK_ENTRY_ICON_SECONDARY, pixbuf);
	} else {
		gtk_entry_set_visibility(GTK_ENTRY(entry), TRUE);	
		gtk_entry_set_icon_tooltip_markup(GTK_ENTRY(entry), 
								          GTK_ENTRY_ICON_SECONDARY, "隐藏密码");
        pixbuf = gdk_pixbuf_new_from_file("openeye.png", &error);
        if (!pixbuf) {
            g_error_free(error);
        }
        gtk_entry_set_icon_from_pixbuf(GTK_ENTRY(entry), GTK_ENTRY_ICON_SECONDARY, pixbuf);
	}
}


int main(int argc,char *argv[])
{
	//gtk环境初始化
	gtk_init(&argc, &argv);
 
	//创建一个窗口
	GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 
	//设置窗口标题
	gtk_window_set_title(GTK_WINDOW(window), "window");
 
	//窗口在显示器中居中显示
	gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

	//设置整个屏幕周围空出来的的空间
    gtk_container_set_border_width(GTK_CONTAINER(window), 15);

    //创建输入框
	GtkWidget *entry_passwd = gtk_entry_new();

	//设置输入框最大输入字符数量
    gtk_entry_set_max_length(GTK_ENTRY(entry_passwd), 32);

    //输入框字符不可见
    gtk_entry_set_visibility((GtkEntry *)entry_passwd, FALSE);

    GError *error = NULL;
    
    //读取本地icon图标(16x16的png图片)
	GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file("closeeye.png", &error);
	if (!pixbuf) {
		g_error_free(error);
	}

	//将图标设置进输入框
    gtk_entry_set_icon_from_pixbuf(GTK_ENTRY(entry_passwd), 
								   GTK_ENTRY_ICON_SECONDARY, pixbuf);
    //图标的鼠标悬浮提示
    gtk_entry_set_icon_tooltip_markup(GTK_ENTRY(entry_passwd), 
								      GTK_ENTRY_ICON_SECONDARY, "显示密码");
 	//将输入框放入窗口
 	gtk_container_add(GTK_CONTAINER(window), entry_passwd);

	//显示所有窗口
	gtk_widget_show_all(window);
 
 	//"destroy"与gtk_main_quit链接
	g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

	//点击图标切换明密文显示情况
	g_signal_connect(G_OBJECT(entry_passwd), "icon-press", G_CALLBACK(cb_entry_icon_press), NULL);

	//9.主事件循环
	gtk_main();
 
	return 0;
}

效果如下:

附上下面两张小图哈哈~


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章