#物聯網感知實驗#gtk案例實現

其他物聯網感知方面內容見:目錄

簡單計算器案例

#include <stdio.h>
#include <gtk/gtk.h>
#include "sungtk_interface.h"
void cb_button(GtkButton* button,gpointer data)
{
	//追加按鈕上的標籤  
	GtkEntry * entry = (GtkEntry*)data;
	//獲取行編輯的內容 
	const  gchar *str  =  gtk_entry_get_text(entry);
	char buf[256]="";
	strcpy(buf,str);
	//獲取按鈕上標籤的內容
	const gchar * str_label = gtk_button_get_label(button);
	//追加
	strcat(buf,str_label);
	//設置行編輯
	gtk_entry_set_text(entry,buf);
}
void cb_button_res(GtkButton* button,gpointer data)
{
	
	GtkEntry * entry = (GtkEntry*)data;
	//獲取行編輯的內容 
	const  gchar *str  =  gtk_entry_get_text(entry);
	char buf[256]="";
	strcpy(buf,str);
	//獲取按鈕上標籤的內容
	// 23+67
	//5*6
	//a&b
	int a=0;
	int b=0;
	char ch=0;
	sscanf(buf,"%d%c%d",&a,&ch,&b);
	int res=0;
	switch(ch)
	{
		case '+':
			res = a+b;
			break;
		case '-':
			res = a-b;
			break;
		case '*':
			res = a*b;
			break;
		case '/':
			res = a/b;
			break;
		case '%':
			res = a%b;
			break;
	}
	//將結果顯示到行編輯上
	char cmd[128]="";
	sprintf(cmd,"%d",res);
	gtk_entry_set_text(entry,cmd);
	

}
void cb_button_delete(GtkButton* button,gpointer data)
{
	GtkEntry * entry = (GtkEntry*)data;
	//獲取行編輯的內容 
	const  gchar *str  =  gtk_entry_get_text(entry);
	char buf[256]="";
	strcpy(buf,str);
	int n = strlen(buf)-1;//abcdef
	buf[n] ='\0';
	gtk_entry_set_text(entry,buf);
		
}
void cb_button_clear(GtkButton* button,gpointer data)
{
	GtkEntry * entry = (GtkEntry*)data;
	gtk_entry_set_text(entry,"");

}
int main(int argc, char *argv[])
{
	gtk_init(&argc,&argv);
	//創建並且設置窗口 
	GtkWidget *win =   gtk_window_new(GTK_WINDOW_TOPLEVEL);//創建窗口
	gtk_window_set_title((GtkWindow *)win,"vbox");//設置窗口的標題
	gtk_widget_set_size_request(win,400,300);//設置窗口的大小
	gtk_window_set_resizable((GtkWindow *)win,FALSE);//設置不可伸縮
	sungtk_background_set_picture(win,"../Image/bk.png",400,300);//設置背景圖
	//創建表格
	GtkWidget *table = gtk_table_new(4,6,TRUE);
	GtkWidget * entry = gtk_entry_new();//創建行編輯
	gtk_table_attach_defaults( (GtkTable*)table,entry,0,6,0,1);
	// 創建三個帶標籤的按鈕
	GtkWidget *button=NULL;
	
	for(int i =0;i<10;i++)
	{
		//數值i轉換成字符串i
		char buf[128]="";
		sprintf(buf,"%d",i);
 		button = gtk_button_new_with_label(buf);
		sungtk_widget_set_font_size(button,30,TRUE);
		gtk_button_set_relief((GtkButton*)button,GTK_RELIEF_NONE);	
		if(i < 5)
		{
			gtk_table_attach_defaults( (GtkTable*)table,button,i,i+1,1,2);
		}	
		else
		{
			gtk_table_attach_defaults( (GtkTable*)table,button,i-5,i+1-5,2,3);

		}
		g_signal_connect(button,"pressed",G_CALLBACK(cb_button),entry);
	
	}
 	GtkWidget *button_add  = gtk_button_new_with_label("+");
 	GtkWidget *button_sub  = gtk_button_new_with_label("-");
 	GtkWidget *button_mul  = gtk_button_new_with_label("*");
 	GtkWidget *button_div  = gtk_button_new_with_label("/");
 	GtkWidget *button_mod  = gtk_button_new_with_label("%");
 	GtkWidget *button_clear  = gtk_button_new_with_label("C");
 	GtkWidget *button_res  = gtk_button_new_with_label("=");
 	GtkWidget *button_delete  = gtk_button_new_with_label("<-");
	//設置按鈕透明
	gtk_button_set_relief((GtkButton*)button_add,GTK_RELIEF_NONE);	
	gtk_button_set_relief((GtkButton*)button_mul,GTK_RELIEF_NONE);	
	gtk_button_set_relief((GtkButton*)button_sub,GTK_RELIEF_NONE);	
	gtk_button_set_relief((GtkButton*)button_div,GTK_RELIEF_NONE);	
	gtk_button_set_relief((GtkButton*)button_mod,GTK_RELIEF_NONE);	
	gtk_button_set_relief((GtkButton*)button_clear,GTK_RELIEF_NONE);	
	gtk_button_set_relief((GtkButton*)button_res,GTK_RELIEF_NONE);	
	gtk_button_set_relief((GtkButton*)button_delete,GTK_RELIEF_NONE);	

	sungtk_widget_set_font_size(button_add,30,TRUE);
	sungtk_widget_set_font_size(button_sub,30,TRUE);
	sungtk_widget_set_font_size(button_mul,30,TRUE);
	sungtk_widget_set_font_size(button_div,30,TRUE);
	sungtk_widget_set_font_size(button_mod,30,TRUE);
	sungtk_widget_set_font_size(button_clear,30,TRUE);
	sungtk_widget_set_font_size(button_res,30,TRUE);
	sungtk_widget_set_font_size(button_delete,30,TRUE);

	g_signal_connect(button_add,"pressed",G_CALLBACK(cb_button),entry);
	g_signal_connect(button_sub,"pressed",G_CALLBACK(cb_button),entry);
	g_signal_connect(button_mul,"pressed",G_CALLBACK(cb_button),entry);
	g_signal_connect(button_div,"pressed",G_CALLBACK(cb_button),entry);
	g_signal_connect(button_mod,"pressed",G_CALLBACK(cb_button),entry);
	g_signal_connect(button_clear,"pressed",G_CALLBACK(cb_button_clear),entry);
	g_signal_connect(button_res,"pressed",G_CALLBACK(cb_button_res),entry);
	g_signal_connect(button_delete,"pressed",G_CALLBACK(cb_button_delete),entry);
	
	gtk_table_attach_defaults( (GtkTable*)table,button_add,0,1,3,4);
	gtk_table_attach_defaults( (GtkTable*)table,button_sub,1,2,3,4);
	gtk_table_attach_defaults( (GtkTable*)table,button_mul,2,3,3,4);
	gtk_table_attach_defaults( (GtkTable*)table,button_div,3,4,3,4);
	gtk_table_attach_defaults( (GtkTable*)table,button_mod,4,5,3,4);
	gtk_table_attach_defaults( (GtkTable*)table,button_clear,5,6,2,3);
	gtk_table_attach_defaults( (GtkTable*)table,button_res,5,6,3,4);
	gtk_table_attach_defaults( (GtkTable*)table,button_delete,5,6,1,2);
	
	//設置按鈕背景透明
	//gtk_button_set_relief((GtkButton*)button1,GTK_RELIEF_NONE);
	//g_signal_connect(button2,"pressed",G_CALLBACK(cb_button2),entry);
	//創建一個表格佈局
	//將按鈕條件到表格
	//gtk_table_attach_defaults( (GtkTable*)table,button1,0,1,0,1);
	//將表格添加到win
	gtk_container_add((GtkContainer*)win,table);
	// 顯示
	gtk_widget_show_all(win);	
	gtk_main();
	return 0;
}
  • 效果預覽
    在這裏插入圖片描述

圖片展示案例

#include <stdio.h>
#include <gtk/gtk.h>
#include "sungtk_interface.h"

char img[100][100] = {"../Image/3.jpg","../Image/4.jpg","../Image/1.jpg","../Image/2.jpg","../Image/5.jpg","../Image/6.jpg"};
const int all = 6;
int id = 0;

void cb_button_last(GtkButton *button,gpointer data)
{
	GtkWidget *image = (GtkWidget*)data;	
	id = (id - 1 + all) % all;
	sungtk_image_load_picture(image, img[id], 336, 518);//給創建好的image重新設計圖片
}

void cb_button_next(GtkButton *button,gpointer data)
{
	GtkWidget *image = (GtkWidget*)data;	
	id = (id + 1) % all;
	sungtk_image_load_picture(image,img[id],336,518);
}

void cb_button_play(GtkButton *button,gpointer data)
{
	GtkWidget *image = (GtkWidget*)data;	
	int i;
	for (i = 1;i < 6; i++)
	{
		id = (id + 1) % all;
		sungtk_image_load_picture(image,img[id],336,518);
		sleep(1);
	}
}
int main(int argc,char *argv[])
{
	gtk_init(&argc,&argv);
	//窗口設置
	GtkWidget *win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title((GtkWindow*)win,"圖像顯示");
	gtk_widget_set_size_request(win,420,700);	
	//設置按鈕	
	GtkWidget *last = gtk_button_new_with_label("Last");
	GtkWidget *next = gtk_button_new_with_label("Next");
	GtkWidget *play = gtk_button_new_with_label("Play");
	//規定按鈕大小
	gtk_widget_set_size_request(last,98,100);
	gtk_widget_set_size_request(next,98,100);
	gtk_widget_set_size_request(play,98,100);
	//規定按鈕位置
	GtkWidget * fixed = gtk_fixed_new();
	gtk_container_add((GtkContainer*)win,fixed);
	gtk_fixed_put((GtkFixed*)fixed,last,42,574);
	gtk_fixed_put((GtkFixed*)fixed,play,168,574);
	gtk_fixed_put((GtkFixed*)fixed,next,294,574);
	//創建一個帶圖片的image控件
	GtkWidget *displayer = sungtk_image_new_from_file("../Image/3.jpg",336,518);
	gtk_fixed_put((GtkFixed*)fixed,displayer,42,42);

	g_signal_connect(last,"pressed",G_CALLBACK(cb_button_last),displayer);
	g_signal_connect(next,"pressed",G_CALLBACK(cb_button_next),displayer);
	g_signal_connect(play,"pressed",G_CALLBACK(cb_button_play),displayer);
	
	gtk_widget_show_all(win);
	gtk_main();		
	return 0;
}

  • 效果預覽
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章