其他物聯網感知方面內容見:目錄
簡單計算器案例
#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;
}
- 效果預覽