文档库 最新最全的文档下载
当前位置:文档库 › gtk2编写图形界面计算器

gtk2编写图形界面计算器

/*免费下载,直接上代码,纯txt格式,utf-8格式,linux行尾*/
/*编译命令:gcc jisuanqi.c -o x.out `pkg-config --cflags --libs gtk+-2.0`*/
/*不要用gcc jisuanqi.c -o x.out `pkg-config --cflags --libs gtk+-3.0`因为2和3有格式区别*/
#include
#include
static GtkWidget *entry;//定义单行输入控件来显示输入输出的数字
gint count=0;//计位
gdouble nn=0;//计数一
gdouble mm=0;//计数二
gint s=0;//算法
gboolean first = TRUE;//首次输入
gboolean have_dot=FALSE;//是否有小数点
gboolean have_result=FALSE;//是否有结果输出
gchar number[100];//保存用户输入的数字
void clear_all(void)
{ //清除所有相关的标记
gint i;
gtk_entry_set_text(GTK_ENTRY(entry),"");
nn=0;
mm=0;
s=0;
count=0;
first=TRUE;
have_dot=FALSE;
have_result=FALSE;
for(i=0;i<100;i++)
number[i]='\0';
}
void on_num_clicked(GtkButton *button,gpointer data)
{
const gchar *num;
gint i;
if(have_result)
clear_all();//有结果则全部清除
if(count==6) return;//够6位数则不能再输入数字
count++;
num=gtk_button_get_label(GTK_BUTTON(button));//取数
i=g_strlcat(number,num,100);//保存
if(first)
nn=strtod(number,NULL);//数一
else
mm=strtod(number,NULL);//数二
gtk_entry_set_text(GTK_ENTRY(entry),number);//显示
}
void on_dot_clicked(GtkButton *button,gpointer data)
{
gint i;
if(have_result)
clear_all();//全部清除
if(have_dot==FALSE)//如果无小数点则可以
{
have_dot=TRUE;
i=g_strlcat(number,".",100);
gtk_entry_set_text(GTK_ENTRY(entry),number);
}//如果有小数点则不输出
}
void on_clear_clicked(GtkButton *button,gpointer data)
{
clear_all();//全部清除
}
void on_suan_clicked(GtkButton *button,gpointer data)
{
gint i;
switch(GPOINTER_TO_INT(data))
{
case 1://当“+”时
s=1;
gtk_entry_set_text(GTK_ENTRY(entry),"");
first=FALSE;count=0;break;
case 2://当“-”时
s=2;
gtk_entry_set_text(GTK_ENTRY(entry),"");
first=FALSE;count=0;break;
case 3://当“*”时
s=3;
gtk_entry_set_text(GTK_ENTRY(entry),"");
first=FALSE;count=0;break;
case 4://当“/”时
s=4;
gtk_entry_set_text(GTK_ENTRY(entry),"");
first=FALSE;count=0;break;
}
have_dot=FALSE;
for(i=0;i<100;i++)//清除数字
number[i]='\0';
}
void on_eq_clicked(GtkButton *button,gpointer data)//当点下"="按钮时
{
double numb;
gchar num[100];
gchar *result;
switch(s)
{
case 1://当“+”时
numb=nn+mm;
break;
case 2://当“-”时
numb=nn-mm;
break;
case 3://当“*”时
numb=nn*mm;
break;
case 4://当“/”时
numb=nn/mm;
break;
}
result=g_ascii_dtostr(num,100,numb);
gtk_entry_set_text(GTK_ENTRY(entry),result);
have_result=TRUE;
}
int main(int argc, char *argv[])//主函数开始
{
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *hbox,*hbox1,*hbox2,*hbox3,*hbox4;
GtkWidget *button;
GtkWidget *label;
gtk_init(&argc,&argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);//主

窗口
g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);
gtk_window_set_title(GTK_WINDOW(window),"简单计算器");//设置窗口标题
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);//窗口位置居中
gtk_container_set_border_width(GTK_CONTAINER(window),10);
vbox=gtk_vbox_new(FALSE,0);
gtk_container_add(GTK_CONTAINER(window),vbox);
hbox=gtk_hbox_new(FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,5);
label=gtk_label_new("计算器");
gtk_box_pack_start(GTK_BOX(hbox),label,TRUE,TRUE,5);
button=gtk_button_new_with_label("清除");
gtk_box_pack_start(GTK_BOX(hbox),button,TRUE,TRUE,5);
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_clear_clicked),NULL);
entry=gtk_entry_new();
gtk_widget_set_direction(entry,GTK_TEXT_DIR_RTL);
gtk_box_pack_start(GTK_BOX(vbox),entry,FALSE,FALSE,5);
hbox1=gtk_hbox_new(FALSE,0); //定义hbox1容纳3,2,1,"+"
gtk_box_pack_start(GTK_BOX(vbox),hbox1,FALSE,FALSE,5);
button=gtk_button_new_with_label("3");//按键3
gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_num_clicked),NULL);
button=gtk_button_new_with_label("2");//按键2
gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_num_clicked),NULL);
button=gtk_button_new_with_label("1");//按键1
gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_num_clicked),NULL);
button=gtk_button_new_with_label("+");//按键+
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_suan_clicked),(gpointer)1);
gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);
hbox2=gtk_hbox_new(FALSE,0);//定义hbox2容纳6,5,4,'-'
gtk_box_pack_start(GTK_BOX(vbox),hbox2,FALSE,FALSE,5);
button=gtk_button_new_with_label("6");//按键6
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_num_clicked),NULL);
gtk_box_pack_start(GTK_BOX(hbox2),button,TRUE,TRUE,5);
button=gtk_button_new_with_label("5");//按键5
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_num_clicked),NULL);
gtk_box_pack_start(GTK_BOX(hbox2),button,TRUE,TRUE,5);
button=gtk_button_new_with_label("4");//按键4
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_num_clicked),NULL);
gtk_box_pack_start(GTK_BOX(hbox2),button,TRUE,TRUE,5);
button=gtk_button_new_with_label("-");//按键-
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_suan_clicked),(gpointer)2);
gtk_box_pack_start(GTK_BOX(hbox2),button,TRUE,TRUE,5);

hbox3=gtk_hbox_new(FALSE,0);//定义hbox3容纳9,8,7,'*'
gtk_box_pack_start(GTK_BOX(vbox),hbox3,FALSE,FALSE,5);
button=gtk_button_new_with_label("9");//按键9
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_num_clicked),NULL);
gtk_box_pack_start(GTK_BOX(hbox3),button,TRUE,TRUE,5);
button=gtk_button_new_with_label("8");//按键8
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBAC

K(on_num_clicked),NULL);
gtk_box_pack_start(GTK_BOX(hbox3),button,TRUE,TRUE,5);
button=gtk_button_new_with_label("7");//按键7
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_num_clicked),NULL);
gtk_box_pack_start(GTK_BOX(hbox3),button,TRUE,TRUE,5);
button=gtk_button_new_with_label("*");//按键*
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_suan_clicked),(gpointer)3);
gtk_box_pack_start(GTK_BOX(hbox3),button,TRUE,TRUE,5);

hbox4=gtk_hbox_new(FALSE,0);//定义hbox4容纳0,.,=,/
gtk_box_pack_start(GTK_BOX(vbox),hbox4,FALSE,FALSE,5);
button=gtk_button_new_with_label("0");//按键0
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_num_clicked),NULL);
gtk_box_pack_start(GTK_BOX(hbox4),button,TRUE,TRUE,5);
button=gtk_button_new_with_label(".");//按键.
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_dot_clicked),NULL);
gtk_box_pack_start(GTK_BOX(hbox4),button,TRUE,TRUE,5);
button=gtk_button_new_with_label("=");//按键=
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_eq_clicked),NULL);
gtk_box_pack_start(GTK_BOX(hbox4),button,TRUE,TRUE,5);
button=gtk_button_new_with_label("/");//按键/
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_suan_clicked),(gpointer)4);
gtk_box_pack_start(GTK_BOX(hbox4),button,TRUE,TRUE,5);

gtk_widget_show_all(window);
gtk_main();
return FALSE;
}

相关文档
相关文档 最新文档