انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: برنامه نویسی GTK+ با زبان C  (دفعات بازدید: 3687 بار)

0 کاربر و 2 مهمان درحال مشاهده موضوع.

آفلاین theMaster

  • Full Member
  • *
  • ارسال: 156
  • جنسیت : پسر
برنامه نویسی GTK+ با زبان C
« : 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

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4872
  • جنسیت : پسر
  • masoft قدیم
پاسخ : برنامه نویسی GTK+ با زبان C
« پاسخ #1 : 19 امرداد 1391، 04:33 ق‌ظ »
خوبه :)

دو تا نکته که می‌تونه کمکتون کنه.
۱) در برنامه‌نویسی عموما توضیحات رو خط بالای دستور می‌نویسند و نه خط بعد اون.
۲) به جای:
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`

آفلاین theMaster

  • Full Member
  • *
  • ارسال: 156
  • جنسیت : پسر
پاسخ : برنامه نویسی GTK+ با زبان C
« پاسخ #2 : 19 امرداد 1391، 09:38 ق‌ظ »
نقل‌قول
۱) در برنامه‌نویسی عموما توضیحات رو خط بالای دستور می‌نویسند و نه خط بعد اون.
تشکر. حتما مد نظر قرار خواهم داد

آفلاین solook

  • Full Member
  • *
  • ارسال: 219
پاسخ : برنامه نویسی GTK+ با زبان C
« پاسخ #3 : 19 امرداد 1391، 11:04 ق‌ظ »
برا نصب محیط گرافیکی gtk  از چه چیزی باید استفاده کنم؟

آفلاین aliva

  • Sr. Member
  • *
  • ارسال: 363
  • جنسیت : پسر
    • http://vakilzade.ir
پاسخ : برنامه نویسی GTK+ با زبان C
« پاسخ #4 : 19 امرداد 1391، 12:17 ب‌ظ »
اگر می‌خواهی gtk رو شروع کنی یک کتابی apress براش زده.
متن خیلی خوبی و روانی داره.
من اون رو توضیه می‌کنم

آفلاین theMaster

  • Full Member
  • *
  • ارسال: 156
  • جنسیت : پسر
پاسخ : برنامه نویسی GTK+ با زبان C
« پاسخ #5 : 19 امرداد 1391، 01:47 ب‌ظ »
نقل‌قول
برا نصب محیط گرافیکی gtk  از چه چیزی باید استفاده کنم؟

اگه منظورت کتابخانه هاشه اون بالا گفتن دستورش اینه:
sudo apt-get install libgtk2.0-dev

آفلاین theMaster

  • Full Member
  • *
  • ارسال: 156
  • جنسیت : پسر
پاسخ : برنامه نویسی GTK+ با زبان C
« پاسخ #6 : 20 امرداد 1391، 11:17 ب‌ظ »
 با سلام
برنامه بعدی ی برنامه ساده با 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);
}


آفلاین adel1368

  • Sr. Member
  • *
  • ارسال: 387
  • جنسیت : پسر
پاسخ : برنامه نویسی GTK+ با زبان C
« پاسخ #7 : 30 امرداد 1391، 10:20 ق‌ظ »
ببخشید این gtk رو از کجا دانلودکنیم
(((خالیق یازان خطی هش کیم پوزابیلمز)))

آفلاین دانیال بهزادی

  • ناظر انجمن
  • *
  • ارسال: 19722
  • جنسیت : پسر
  • Urahara Kiesuke
    • وبلاگ
پاسخ : برنامه نویسی GTK+ با زبان C
« پاسخ #8 : 03 شهریور 1391، 09:20 ب‌ظ »
+GTK تو خود سسیستم هست و خیلی از برنامه‌های اوبونتو با اون کار می‌کنن. برای کامپایل برنامه‌هایی که توشون از +GTK استفاده شده احتیاج به یه کامپایلر (که تو اوبونتو نصبه) و کتاب‌خونه‌ی مربوطه با نام بسته‌ی libgtk2.0-dev هست
اگه این ارسال بهت کمک کرد، دنبال دکمهٔ تشکر نگرد. به جاش تو هم به جامعهٔ آزادت کمک کن

آفلاین saan

  • Jr. Member
  • *
  • ارسال: 51
پاسخ : برنامه نویسی GTK+ با زبان C
« پاسخ #9 : 07 شهریور 1392، 12:59 ب‌ظ »
دوستان حالا یه سوال من دارم در رابطه با GTK
این GTK خودش یه زبان برنامه‌نویسی هستش یا یه فریم‌ورکه؟با چه زبانی کار می‌کنه؟
آیا راهی توش هست که بشه با یه تابع آماده‌ای چیزی تاریخ شمسی رو توش به تاریخ میلادی تبدیل کرد؟

آفلاین xubuntu4iran

  • Hero Member
  • *
  • ارسال: 748
  • جنسیت : پسر
پاسخ : برنامه نویسی GTK+ با زبان C
« پاسخ #10 : 07 شهریور 1392، 05:53 ب‌ظ »
gtk یه widget toolkit  است به زبان C نوشته شده و binding برای c++ و پایتون و.. موجوده

نقل‌قول
آیا راهی توش هست که بشه با یه تابع آماده‌ای چیزی تاریخ شمسی رو توش به تاریخ میلادی تبدیل کرد؟
برای این کار باید یه برنامه نوشت

آفلاین ح.م

  • High Hero Member
  • *
  • ارسال: 1274
  • جنسیت : پسر
  • دین بدون خرد مانند خرد بدون دین بی معناست
پاسخ : برنامه نویسی GTK+ با زبان C
« پاسخ #11 : 08 شهریور 1392، 03:56 ب‌ظ »
دوستان حالا یه سوال من دارم در رابطه با GTK
این GTK خودش یه زبان برنامه‌نویسی هستش یا یه فریم‌ورکه؟با چه زبانی کار می‌کنه؟
آیا راهی توش هست که بشه با یه تابع آماده‌ای چیزی تاریخ شمسی رو توش به تاریخ میلادی تبدیل کرد؟
اینطوری که من فهمیدم GTK فقط یه کتابخونه هست نه چیز دیگه ! پس می شه از کتابخونه های دیگه هم درش استفاده کرد مثل PyQt که زبان Python هست و از کتابخونه های Qt استفاده می کنه !
عاقبت انحصار شکست و سرانجام کمونیسم گنویی دیکتاتوریست !
الگوی متن باز از هر جهت بر الگوی نرم افزار آزاد رجحان دارد
وَسَيَعْلَمُ الَّذِينَ ظَلَمُوا أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ