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

效果如下:

附上下面兩張小圖哈哈~


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