📄 entry.c
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <gtk/gtk.h>static GtkWidget *entry1;GtkWidget *win;const gchar *text_entry;gchar number[8];guint count=0;char *strin[16] = {"1","2","3","+","4","5","6","-","7","8","9","Back","0","●","Del","Enter"};void clear_all (void) //消除所有相关标记{ gint i; count=0; // gtk_entry_set_text (GTK_ENTRY (entry),""); //消除单行输入控件标记 for (i = 0; i < 100; i++) //消除保存的数字 { number[i] = '\0'; } gtk_entry_set_text(GTK_ENTRY(entry1),"");} void CountChange( ){ if (strchr(number,0x2E)) { count--; fprintf(stderr,"%d\n",count); return; } else { char *p=strchr(number,0x30); if(p == "1" ) { // 第一位是小数点 if(count<1) { return; } count=0; if(strchr(text_entry,'-')) { gtk_entry_set_text(GTK_ENTRY(entry1),"-"); } else { gtk_entry_set_text(GTK_ENTRY(entry1),""); } memset(number,0,8); fprintf(stderr,"%d\n",count); return; } else { if(count<1) { return; } count = strlen(number); fprintf(stderr,"%d\n",count); return; } } }void on_back_clicked(GtkButton *button, gpointer data){ // const gchar *text_entry; gchar number1[8]={0}; text_entry = gtk_entry_get_text(GTK_ENTRY(entry1)); if(*text_entry == '-') { if(strlen(text_entry)==1) { gtk_entry_set_text(GTK_ENTRY(entry1),""); } else { g_strlcpy(number1,number,strlen(number)); g_strlcpy(number,number1,strlen(number1)+1); gtk_entry_set_text(GTK_ENTRY(entry1),number); gtk_entry_prepend_text (GTK_ENTRY (entry1), "-"); CountChange(); } } else { g_strlcpy(number1,number,strlen(number)); g_strlcpy(number,number1,strlen(number1)+1); gtk_entry_set_text(GTK_ENTRY(entry1),number); CountChange(); }}void on_num_clicked (GtkButton *button, gpointer data){ //当数字键按下时执行 const gchar *num,*Floatnum; gint i; gchar number1[8]={0},panduan[8]={0}; num = gtk_button_get_label (GTK_BUTTON (button)); //取数 // g_strlcat (number, num, 8); //保存 if(number[0]!= 0) { // if( !(strchr(num,0x30)) ) // { // 数不是0 if (count == 4) { return; //够4位则不能在输入数字*/ } count++; g_strlcat (number, num, 8); //保存 gtk_entry_append_text (GTK_ENTRY (entry1), num); //显示 // } } else { // 第一个数是0 if(strchr(num,0x30)) { // 第二个数是0 if(count<1) { gtk_entry_append_text (GTK_ENTRY (entry1),"0"); //显示 count=4; } } else { count=strlen(number); if(count == 4) { return; } count++; number[0]=0x00; g_strlcat (number, num, 8); //保存 if(number[0]==0) { Floatnum = gtk_entry_get_text(GTK_ENTRY(entry1)); g_strlcpy(panduan,Floatnum,8); if(panduan[0]=='-') { g_strlcpy(number1,number,strlen(number)); g_strlcpy(number,number1,strlen(number1)-1); gtk_entry_set_text(GTK_ENTRY(entry1),number); gtk_entry_prepend_text (GTK_ENTRY (entry1), "-"); } } else { Floatnum = gtk_entry_get_text(GTK_ENTRY(entry1)); g_strlcpy(panduan,Floatnum,8); if(panduan[0]=='-') { gtk_entry_set_text(GTK_ENTRY(entry1),number); gtk_entry_prepend_text (GTK_ENTRY (entry1), "-"); } else { gtk_entry_set_text(GTK_ENTRY(entry1),number); } } } }}void on_dot_clicked (GtkButton *button, gpointer data){ //当小数点按下时 gint i = 0; gchar panduan[8] = {0}; for(i = 0;i<8;i++) { if(number[i] == '.') return; //如果无小数点则可以 } const gchar *text_entry; text_entry = gtk_entry_get_text(GTK_ENTRY(entry1)); g_strlcpy(panduan,text_entry,8); if (*number == 0) //如果小数点前没有数字则补0 { count = 2; g_strlcat (number, "0.", 8); gtk_entry_set_text (GTK_ENTRY (entry1), number); if(panduan[0] == '-') { gtk_entry_prepend_text (GTK_ENTRY (entry1), "-"); } } else { count = 2; g_strlcat (number, ".", 8); gtk_entry_set_text (GTK_ENTRY (entry1), number); if(panduan[0] == '-') { gtk_entry_prepend_text (GTK_ENTRY (entry1), "-"); } }}void on_clear_clicked (GtkButton *button, gpointer data){ clear_all (); //全部清除}void on_symbol_clicked (GtkButton *button, gpointer data){ //当按钮 +,-按下时 const gchar *symbol; const gchar *fuhao; fuhao = gtk_entry_get_text(GTK_ENTRY(entry1)); //fuhao = gtk_button_get_label(button); switch (GPOINTER_TO_INT (data)) { case 1: //"+" if(*fuhao == '-') gtk_entry_set_text (GTK_ENTRY (entry1), number); break; case 2: //"-" if(*fuhao != '-') gtk_entry_prepend_text (GTK_ENTRY (entry1), "-"); break; }}void on_button_clicked (GtkWidget *entry, gpointer data) //当确定键按下时执行{ const gchar *password = gtk_entry_get_text (GTK_ENTRY (entry1)); //g_print ("%s", password); //在终端显示输入的数字 gtk_entry_set_text(GTK_ENTRY(entry),password); // g_print ("\n");} /*void on_button_clicked (GtkWidget *widget, GtkWidget *entry ) //当确定键按下时执行{ gtk_entry_set_text (GTK_ENTRY (entry), number); //显示 text_entry = gtk_entry_get_text (GTK_ENTRY (entry)); printf("Entry contents: %s\n", text_entry); } *//* void on_num_clicked (GtkButton *button, gpointer data) { gchar *str; str = g_strdup_printf("%s%s", gtk_entry_get_text(GTK_ENTRY(data)), gtk_button_get_label(button)); gtk_entry_set_text(GTK_ENTRY(data), str); g_free(str); } */void hide_jianpan(GtkWidget *widget, gpointer data){ //GtkWidget *win = GTK_WIDGET(data); if (GTK_IS_WIDGET(win)) { gtk_widget_destroy(win); // g_print("\tdialog destroy\n\n"); // gdk_color_parse("white", &color); // gtk_widget_modify_base(widget, GTK_STATE_NORMAL, &color); }}void jianpan(GtkWidget *entry, gpointer data){ //GtkWidget *win=GTK_WIDGET(data); int x,y; if(! (GTK_IS_WIDGET(win)) ) { GtkWidget *fixed; GtkWidget *button; //GtkWidget *table; GtkWidget *label; GtkWidget *image; GdkColor color; gint i = 0, j = 0; win = gtk_window_new(GTK_WINDOW_POPUP); gtk_widget_set_size_request (GTK_WIDGET (win), 300, 350); gtk_window_set_policy(GTK_WINDOW(win),FALSE,FALSE,FALSE); gdk_window_get_origin(entry->window,&x,&y);// 获取entry的坐标位置 gtk_window_move(GTK_WINDOW(win),x,y+20); fixed = gtk_fixed_new(); //table = gtk_table_new (5, 4, TRUE); //创建格状控件,三个参数分别是行数、列数、是否均匀分布 //gtk_widget_set_usize (table, 260, 320); //设置控件大小 //label = gtk_label_new("输入窗口"); //gtk_fixed_put(GTK_FIXED(fixed),label,120,5); //gtk_container_add(GTK_CONTAINER(win),label); //gtk_container_add (GTK_CONTAINER (win), table); entry1 = gtk_entry_new (); //创建单行输入控件 gtk_entry_set_visibility (GTK_ENTRY (entry1), TRUE); //显示输入内容 //gtk_entry_set_max_length(GTK_ENTRY(entry), 8); // gtk_table_attach_defaults (GTK_TABLE (table), entry1, 0, 4, 0, 1); //将控件放入table gtk_widget_set_usize (entry1, 298, 35); gtk_fixed_put(GTK_FIXED(fixed),entry1,1,33); image = gtk_image_new_from_file("112.png"); //gtk_table_attach_defaults(GTK_TABLE(table),image,0,4,0,1); gtk_fixed_put(GTK_FIXED(fixed),image,1,1); gdk_color_parse("blue", &color); gtk_widget_modify_bg(label,GTK_STATE_NORMAL, &color); clear_all(); for(i=0; i<4; i++) { for(j=1; j<=4; j++) { button=gtk_button_new_with_label(strin[(j-1)*4+i]); gtk_widget_set_usize (button, 65, 65); gtk_fixed_put(GTK_FIXED(fixed),button,8+i*73,75+(j-1)*70); if(j==1 && i==3) g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (on_symbol_clicked), (gpointer)1); if(j==2 && i==3) g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (on_symbol_clicked), (gpointer)2); if(j==3 && i==3) g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(on_back_clicked),entry1); if(j==4 && i==1) g_signal_connect (G_OBJECT (button), "clicked",G_CALLBACK (on_dot_clicked),entry1); if(j==4 && i==2) g_signal_connect (G_OBJECT (button), "clicked",G_CALLBACK (on_clear_clicked), entry1); if(j==4 &&i==3) { g_signal_connect_swapped (G_OBJECT (button), "clicked", G_CALLBACK (on_button_clicked), entry); gtk_signal_connect_object(GTK_OBJECT(button),"clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),GTK_OBJECT(win) ); } if ( ( j<4 && i<3) || ( j==4 && i==0) ) g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (on_num_clicked),entry1); // gtk_table_attach(GTK_TABLE(table),button,i,i+1,j,j+1,GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 1, 1); } } gtk_container_add (GTK_CONTAINER (win), fixed); gtk_widget_show_all (win); }}int main( int argc, char *argv[] ){ GtkWidget *window; GtkWidget *vbox, *hbox; GtkWidget *entry; GtkWidget *button; GtkWidget *check; gint t; gtk_init (&argc, &argv); /* 创建一个新窗口 */ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_widget_set_size_request (GTK_WIDGET (window), 400, 500); gtk_window_set_title (GTK_WINDOW (window), "数字键盘输入框"); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_policy(GTK_WINDOW(window),FALSE,FALSE,FALSE); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL); g_signal_connect_swapped (G_OBJECT (window), "delete_event", G_CALLBACK (gtk_widget_destroy), window); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (window), vbox); gtk_widget_show (vbox); for(t=0;t<5;t++) { entry = gtk_entry_new (); gtk_entry_set_max_length (GTK_ENTRY (entry), 8); gtk_box_pack_start (GTK_BOX (vbox), entry, TRUE, TRUE, 0); /* */ g_signal_connect(entry,"button_press_event",G_CALLBACK(hide_jianpan),entry1); g_signal_connect(entry, "button_press_event", G_CALLBACK (jianpan), entry1); } hbox = gtk_hbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (vbox), hbox); button = gtk_button_new_with_label("button focus"); gtk_box_pack_start(GTK_BOX(vbox), button, 1, 1, 5); gtk_widget_show(button); button = gtk_button_new_from_stock (GTK_STOCK_CLOSE); g_signal_connect_swapped (G_OBJECT (button), "clicked", G_CALLBACK (gtk_main_quit), NULL); gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0); GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); gtk_widget_grab_default (button); gtk_widget_show_all (window); gtk_main(); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -