با سلام
برنامه بعدی ی برنامه ساده با GTK هست که یه فرم رو نشون می ده با یه دکمه که وقتی دکمه رو میزنیم لیبل دیکمه عدد میشه و هر بار که روش کلیک می کنیم یکی به مقدارش اضافه میشه
#include <gtk/gtk.h>
#include <stdio.h>
#include <stdlib.h>
int i=0;
void counter(GtkWidget*);
int main(int argc, char* argv[])
{
gtk_init(&argc, &argv);
GtkWidget *window ;
GtkWidget *button;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
button = gtk_button_new();
gtk_button_set_label(GTK_BUTTON(button), "This is my text");
g_signal_connect(window, "delete_event", G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(button, "button_press_event", G_CALLBACK(counter), NULL);
gtk_container_add(GTK_CONTAINER(window), button);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
void counter(GtkWidget* label)
{
i++;
char buffer[30];
sprintf(buffer, "%d", i);
gtk_button_set_label(GTK_BUTTON(label), buffer);
}
اینم سورس با توضیحات
#include <gtk/gtk.h>
#include <stdio.h>
#include <stdlib.h>
int i=0;
void counter(GtkWidget*);
int main(int argc, char* argv[])
{
gtk_init(&argc, &argv);
GtkWidget *window ;
//اینجا یک ویدجت ساختیم که بعدا تبدیل به دکمه میشه
GtkWidget *button;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
//اینجا ی نمونه از دکمه ساخته میشه
button = gtk_button_new();
//به دکمه یک لیبل دادیم.
gtk_button_set_label(GTK_BUTTON(button), "This is my text");
g_signal_connect(window, "delete_event", G_CALLBACK(gtk_main_quit), NULL);
//اینجا جاییه که رویداد کلیک مربط به دکمه رو مدیریت می کنیم. ما یک تابع تعریف کردیم به نام کانتر که به متغییر i که اون بالا تعریف کردیم یک مقدار اضافه می کنه و توی لیبل مربوط به باتن میذاره
g_signal_connect(button, "button_press_event", G_CALLBACK(counter), NULL);
// فرم ها نوعی کانیتنر هستند. یعنی می تونن درون خودشون ویدجت بپذیرن
//ما اینجا گفتیم که باتن رو ادد کن توی فرم
gtk_container_add(GTK_CONTAINER(window), button);
//برای نمایش دادن ویدجت ها باید تابع gtk_widget_show رو که پارامترش ویدجتیه که می خوایم نشون بدیم هست رو صدا بزنیم
//ولی برای اینکه مجبور نشیم برای همه ی اشیا این رو صدا بزنیم ما کانتینر باتتن رو به فرم تنظیم کردیم(در خط بالا). حالا با صدا زدن تابع (gtk_widget_show_all) و دادن فرم به عنوان پارامتر این تابع به صورت بازگشتی میاد از فرم شروع می کنه و تمامی ویدجت ها زیرمجموعه فرم رو به حالت نمایش می بره
gtk_widget_show_all(window);
gtk_main();
return 0;
}
//این هم تابع شمارنده که خیلی ساده است
void counter(GtkWidget* label)
{
//یک مقدار به i اضافه کردیم
i++;
// یک متغیر برای ذخیره مقدار رشته ای متغیر i برای انتصاب به باتن تعریف کردیم
char buffer[30];
//متغییر عددی رو به رشته تبدیل کردیم
sprintf(buffer, "%d", i);
//مقدار رشته رو به عنوان لیبل بات قرار دادیم
gtk_button_set_label(GTK_BUTTON(label), buffer);
}