انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: theMaster در 19 امرداد 1391، 01:17 قظ
-
اینو تو فروم ایران بی اس دی نوشتم اینجا هم میذارم دوستانی که مثل خودم مبتدی هستن استفاده کنند. ;D
با سلام خدمت دوستان
با توجه به اینکه برنامه نویسی لینوکس رو تازه شروع کردم چیزایی که یاد گرفتم رو به اشتراک می ذارم تا بقیه وقت کمتری برای یادگیری صرف کنن.
اولین برنامه جی تی کی که فقط یه پنجره رو به نمایش میذاره به زبان سی نوشتم اینجا میذارم.
#include <gtk/gtk.h>
int main(int argc, char* argv[])
{
gtk_init(&argc , &argv);
GtkWidget* window;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(window, "delete-event", G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show(window);
gtk_main();
return 0;
}
اینم سورس به همراه توضیحات خط به خط
#include <gtk/gtk.h>
// فایل های مورد نظر را وارد کردیم
int main(int argc, char* argv[])
{
gtk_init(&argc , &argv);
// شروع برنامه های جی تی کی از این تابع هستند پارامتر های ورودی برنامه رو به عنوان ورودی بهش دادیم
GtkWidget* window;
//در برنامه نویسی جی تی کی همه چیز ویدجت هست. پنجره ها. دکمه ها.منوها .همه به نوعی ویدجت هستند. برای نمایش یک پنجره ما یک متغییر از نوع GtkWidget ساختیم
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
//برای اینکه بتونیم از متغییر پنجره اسفاده کنیم باید یه نمونه از پنجره ساخته بشه که این تابع اینکار می می کنه
//GTK_WINDOW_TOPLEVEL میگه که این برنامه در بالاترین سطح پنجره ها قرار میگیره.
g_signal_connect(window, "delete-event", G_CALLBACK(gtk_main_quit), NULL);
//این تابع کارش وصل کردن سیگنالها به توابع هست. اگه نخوایم پیچیده اش کنیم سیگنالهای یه چیزایی شبیه به event ها هستند
//پارامتر اول میگه که چه کسی این سیگنال رو ایجاد میکنه.که واسه این برنامه پنجره هست
//پارامتر دوم اسم سیگنال رو مشخص می کنه. که اسمش delete-event هست.این سیگنال وقتی اتفاق می افته که ما ضربدر گوشه پنجره رو جهت بستن بزنیم
//پارامتر بعدی میگه این سیگنال به چه تابعی وصل شه.که ما گفتیم gtk_main_quit.این یکی از توابع
//از قبل تعریف شده ی جی تی کی است.و هرموقع این رو صدا بزنیم کلا از برنامه میاد بیرون
//پارامتر اخر اختیاریه که برای ارسال دیتا به تابع فراخوانی شده به کار میره که اینجا ما نول فرستادیم. یعنی هیچی نداریم
gtk_widget_show(window);
// با این تابع ما به جی تی کی میگیم که پنجره ای که ساختیم رو نمایش بده.
gtk_main();
// این تابع شروع کار حلقه لوپ اصلی برنامه است. با اجرای این .برنامه منتظر میمونه تا یه اتفاقی بیافته و event ای اجرا بشه و تا فراخوانی تابع gtk_main_quit این حلقه به کارش ادامه می ده
return 0;
}
در کل امروز یکم بیکار بودم.یعنی حوصله کار دیگه ای رو نداشتم گفتم هم خودم یاد بگیرم هم یه حالی به بچه ها بدم ::)
یادم رفت بگم برای کامپایلش هم از این دستور استفاده کنید. البته قبلا باید کتابخانه ها مربوط به GTK+ Development روی سیستم نصب باشه
اسم فایل من gtk.c و فایل خروجی ام gtk1 هست. شما می تونید با هر اسمی که خواستید ذخیره و با همون اسم کامپایل کنید.
gcc -o gtk1 gtk.c `pkg-config --libs gtk+-2.0` `pkg-config --cflags gtk+-2.0`
با این دستور هم تو اوبونتو می تونید کتابخانه ها رو نصب کنید
sudo apt-get install libgtk2.0-dev
-
خوبه :)
دو تا نکته که میتونه کمکتون کنه.
۱) در برنامهنویسی عموما توضیحات رو خط بالای دستور مینویسند و نه خط بعد اون.
۲) به جای:
gcc -o gtk1 gtk.c `pkg-config --libs gtk+-2.0` `pkg-config --cflags gtk+-2.0`
میتونید بنویسید:
gcc -o gtk1 gtk.c `pkg-config --libs --cflags gtk+-2.0`
-
۱) در برنامهنویسی عموما توضیحات رو خط بالای دستور مینویسند و نه خط بعد اون.
تشکر. حتما مد نظر قرار خواهم داد
-
برا نصب محیط گرافیکی gtk از چه چیزی باید استفاده کنم؟
-
اگر میخواهی gtk رو شروع کنی یک کتابی apress براش زده.
متن خیلی خوبی و روانی داره.
من اون رو توضیه میکنم
-
برا نصب محیط گرافیکی gtk از چه چیزی باید استفاده کنم؟
اگه منظورت کتابخانه هاشه اون بالا گفتن دستورش اینه:
sudo apt-get install libgtk2.0-dev
-
با سلام
برنامه بعدی ی برنامه ساده با 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);
}
-
ببخشید این gtk رو از کجا دانلودکنیم
-
+GTK تو خود سسیستم هست و خیلی از برنامههای اوبونتو با اون کار میکنن. برای کامپایل برنامههایی که توشون از +GTK استفاده شده احتیاج به یه کامپایلر (که تو اوبونتو نصبه) و کتابخونهی مربوطه با نام بستهی libgtk2.0-dev هست
-
دوستان حالا یه سوال من دارم در رابطه با GTK
این GTK خودش یه زبان برنامهنویسی هستش یا یه فریمورکه؟با چه زبانی کار میکنه؟
آیا راهی توش هست که بشه با یه تابع آمادهای چیزی تاریخ شمسی رو توش به تاریخ میلادی تبدیل کرد؟
-
gtk یه widget toolkit است به زبان C نوشته شده و binding برای c++ و پایتون و.. موجوده
آیا راهی توش هست که بشه با یه تابع آمادهای چیزی تاریخ شمسی رو توش به تاریخ میلادی تبدیل کرد؟
برای این کار باید یه برنامه نوشت
-
دوستان حالا یه سوال من دارم در رابطه با GTK
این GTK خودش یه زبان برنامهنویسی هستش یا یه فریمورکه؟با چه زبانی کار میکنه؟
آیا راهی توش هست که بشه با یه تابع آمادهای چیزی تاریخ شمسی رو توش به تاریخ میلادی تبدیل کرد؟
اینطوری که من فهمیدم GTK فقط یه کتابخونه هست نه چیز دیگه ! پس می شه از کتابخونه های دیگه هم درش استفاده کرد مثل PyQt که زبان Python هست و از کتابخونه های Qt استفاده می کنه !