10 مرداد 1389,ساعت 02:08:37 *
خوش آمدید، مهمان - لطفاً جهت ثبت نام اینجا و جهت ورود اینجا کلیک نمائید.
آیا ایمیل فعال سازی حساب کاربریتان را از دست داده‌اید؟

لطفاً جهت ورود نام‌کاربری و کلمهٔ‌عبورتان را وارد نمائید
اخبار: خبر، مصاحبه، نقد و بررسی و بیشتر... هر هفته در رادیو لینوکس‌اف‌ام
 
   فهرست   جستجو ورود عضویت  
صفحه: [1] 2   پایین
  ارسال به دوستان  |  چاپ صفحه  
نویسنده عنوان: PyQt : با هم یاد بگیریم :)  (دفعات بازدید: 1757 بار)
0 کاربر عضو و 1 مهمان درحال مشاهده عنوان.
سید حمید مهدوی
Hero Member
*
آفلاین آفلاین

تعداد ارسال: 781

الهی به امید تو!


WWW
« حاضر: 23 شهريور 1388,ساعت 10:13:11 »

سلام به همه
گفته شده که یاد گیری بر هر کسی واجبه و از طرفی کسی که چیزی رو یاد گرفت باید زکاتش رو بده Smiley
حالا ما (من بعلاوه هر کسی که دوست داره) می خوایم PyQt یاد بگیریم هرکسی هست یا علی
جلسه اول:
در این نوشتار مبنا را بر این گذاردیم تا که خواننده با زبان برنامه سازی پایتون به صورت مقدماتی آشناست همچنین مبنا بر آن است که وی محیط های نگاره ای(گرافیکی GUI) را باز می شناسد و با تفاوت اجزای گرافیکی همچون دکمه ها، رادیو باتوم ها، چک باکس ها، تکس ادیت ها و … آشناست (به یاد lomion)

این رو به عنوان ساده ترین برنامه ممکن در نظر بگیرید
کد:
#!/usr/bin/env python
import sys
from PyQt4 import QtGui
app = QtGui.QApplication(sys.argv)
hello = QtGui.QPushButton("Hello world!")
hello.resize(100, 30)
hello.show()
sys.exit(app.exec_())
خوب بذارین ببینیم چی داریم:خط اول که مشخصه چیه
خط دوم هم نیاز به توضیح نداره
توی خط سوم از مجموعه PyQt4 قسمت QtGui رو به برنامه وارد کردیم که بیشتر اجزای گرافیکی توی همین مجموعه هستند البته تا اونجا که من می دونم همه اونها همین جا باید باشن ولی چون اطلاع کاملی ندارم چیزی نمی گم
هر برنامه PyQt نیاز به یک شی از نوع   QtGui.QApplication داره که در واقع همون برنامه ماست در خط چهارم چنین شی رو با آرگومانهای ورودی به خود برنامه ساختیم
تو خط پنجم یه دکمه ساختیم به نام hello که نوشته روی اون  Hello world هست
حالا یه سری خصوصیات به دکمه می دیم از جمله اندازه و مهمتر از اون خصوصیت نمایشیه که می گیم این دکمه قابل نمایش باشه یعنی مخفی نباشه
و در پایان هم برنامه رو با خروجی app که قبلا ساختیم و ارسال دادن اون به خروجی برنامه می بندیم.

یه فرم با یه دکمه با ابعادی که مشخص شده و نوشته ای که توی برنامه برای اون در نظر گرفته شده که هیچ کاری هم انجام نمی ده!
حالا می خواهیم یه تابع ساده به این دکمه مرتبط  کنیم چطوری؟؟  آها!! اینجاست
توی کتابخونه qt  دو تا دونه مفهوم داریم که خیلی مهم هستند:
۱-signal
۲-slot
البته چیزای دیگه ای هم مثل event ها هستند ولی اونا رو بعد توضیح می دم
حالا اگر بخوام توضیح بدم اینطوری می شه : signal مثل یه هورمونه که تو بدن ترشح می شه این هورمون رو بلافاصله خون به تمام قسمت های بدن می رسونه ولی حالا چه اتفاقی می افته ؟؟ هیچی چون گیرنده ای برای این هورمون وجود نداره و مثل این می مونه که اصلا هورمونی ترشح نشده!!
خوب که چی؟ آهان!! اینجاست : ما بایستی گیرنده هایی برای این هورمون طراحی کنیم یا گیرنده هایی رو به این هورمون متصل کنیم که این گیرنده ها همون slot هستند
جالب شد نه؟؟!!
حالا برگردیم به برنامه

 
کد:
#!/usr/bin/env python
import sys
from PyQt4 import QtGui, QtCore
app = QtGui.QApplication(sys.argv)
hello = QtGui.QPushButton("Hello world!")
hello.resize(100, 30)
hello.setFont(QtGui.QFont("Times", 12, QtGui.QFont.Bold))
QtCore.QObject.connect(hello, QtCore.SIGNAL("clicked()"), app,
QtCore.SLOT("quit()"))
hello.show()
sys.exit(app.exec_())

قسمت های تکراری رو دیگه توضیح نمی دیم و می مونه بقیه
ما از pyqt قسمت qtcore رو هم به برنامه اصافه کردیم که signal ها و slot ها اونجا تعریف می شن . البته توجه داشته باشید که تابع connect رو widget ها هم (البته تا اونجا که من می دونم) دارن و شما می تونستید برای این تابع از دکمه استفاده کنید یعنی
کد:
hello.connect(hello, QtCore.SIGNAL("clicked()"), app, QtCore.SLOT("quit()"))
البته قسمت دیگه ای هم وجود داره که می شه گفت اضافه هست البته توی برنامه های کوچیک که به مرور باهاشون آشنا می شید
حالا چی داریم؟ ما با این کار اون گیرنده هورمون توی بدن رو مشخص کردیم و اصطلاحا اونها رو به هم متصل کردیم
چطوری؟؟
گفتیم که یکی از غدد بدن هست به نام hello که این غده یه هورمون ترشح می کنه به نام clicked توجه کنید که ممکنه خیلی از غدد بدن این هورمون رو ترشح کنن ولی ما بایستی فقط به هورمونی که از این غده ترشح می شه جواب بدیم
توی آرگومان دوم نوع هورمون رو مشخص کردیم که گفته شد
توی آرگومان سوم گفتیم که گیرنده هورمون کیه که همون app هست. البته این یه خورده اخطیاریه توجه کنید که فقط یه خورده  Grin
توی آرگمان چهارم هم عملی که در قبال گرفتن این پیام انجام می شه رو توضیح دادیم که همون خروجه
توی یه خط هم نوی قلم رو مشخص کردیم که نیاز به توضیح نداره
فکر نمی کنم شما بخواین برنامه ای بسازید که فقط یه دکمه توش باشه پس لازمه که طرح بندی ها رو یاد بگیریم چطوری؟
می گم الان اینو داشته باشید:

کد:
#!/usr/bin/env python
import sys
from PyQt4 import QtCore, QtGui
app = QtGui.QApplication(sys.argv)
window = QtGui.QWidget()
window.resize(200, 120)
hello = QtGui.QPushButton("hello word!", window)
hello.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold))
hello.setGeometry(10, 40, 180, 40)
QtCore.QObject.connect(hello, QtCore.SIGNAL("clicked()"),
                       app, QtCore.SLOT("quit()"))
window.show()
sys.exit(app.exec_())

این برنامه اولین قدم بذای طرح بندیه . چطوری حالا می گم:
ما اینجا بر خلاف قبل که دکه وابسطه به هیج کجا نبود یه ویدگت ساختیم به نام window و دکمه رو به اون متصل کردیم
حالا با نمایش window کل اجزای متصل به اون هم نمایش داده می شه و کارایی از این قبیل، تنها چیزی که شاید نیاز به توضیح داشته باشه اینکه که موقع ساخت دکمه اون رو به پنجره اصلی یعنی window متصل کردیم که البته این یه کم غیر معموله و بیشتر با استفاده از توابع layout این کار رو انجام می دن که توضیح می دم
از همینجا تاکید می کنم که توی هر برنامه سازی گرافیکی layout نقش بسیار مهمی داره در نتیجه من تذکر می دم که هر چیزی رو که دوست داشتید سرسری بگیرید layout رو سرسری نگیرید و اون رو به نحو شایسته یاد بگیرید. گرچه با QtDesigner می تونید طرح بندی کنید ولی من خودم خوشم نیومد (کد بی مصرف زیادی تولید میکنه) گرچه آینده اونو هم توضیح می دم
پایان جلسه اول
بعدا در مورد مجوز این نوشته هم فکر می کنم الان بی مجوزه Shocked
تا یادم نرفته با نظرات مفید خودتون ما رو به نوشتن دلگرم فرمایید (شد مثل وبلاگا)
« آخرین ویرایش: 23 شهريور 1388,ساعت 10:14:58 توسط سید حمید مهدوی » گزارش به مدیر انجمن   خارج شده است

یا علی گفتیم و عشق آغاز شد
سید محمود رضا سجادی
Hero Member
*
آفلاین آفلاین

تعداد ارسال: 701



WWW
« پاسخ #1 حاضر: 23 شهريور 1388,ساعت 12:26:29 »

سلام
خیلی عالی بود. فقط یک سوال
ببخشید اگر زیادی مبتدیه و نمیتونم سوال رو هم خوب شرح بدم (چون بلد نیستم)

mono و dotnet و البته بعضی IDE های دیگه این قابلیت رو دارند که راهنماییتون کنن. مثلا وقتی مینویسی btnHello و دکمه دات (.) رو میزنی بالفاصله لیستی از پراپرتی های اون شی رو برات میاره و یا وقتی یک تابع رو تایپ میکنی بلا فاصله بعد از اینکه پرانتز رو باز میکنی یک پیغام بهت میده و تمام شاکال مجاز برای اون تابع رو نشونت میده
این خیلی راهنمایی و کمک بزرگیه
اول اینکه جلوی غلط های املایی یا کوچک و بزرگ نوشتن دستورات رو میگیره و دوم ککه خیلی هم مهمتره اینه که برای ما تازه کارا که تمام دستور ها رو بلد نیستم میشه کمک و راهنمابیی گرفت و توابع موجود در یک کتابخونه رو همنجا در زمان کد (و نه از help) دید

سوال : آیا IDE ای در لینوکس وجود داره که این قابلیت رو در باره زبون هایی مثل پیتون و پرل و سی یا سی پلاس پلاس داشته باشه؟؟؟؟
اگه قرار باشه طبق آموزش شما محیط گرافیکی رو کد بزنیم و از qtdesigner به همون دلیلی که گفتید(ایجاد کد های بد و زیادی) صرف نظر کنیم به همچین IDE ای نیاز واجب داریم
مخصوصا در اول کار

بازم ممنون
حتما ادامه بدید

لطفا یکی از دوستان هم آموزش gtk رو شروع کنه
گزارش به مدیر انجمن   خارج شده است

مرکز برنامه نویسی ایران
محلی برای تمامی علاقه مندان به برنامه نویسی http://www.SourceCenter.IR
lomion
گروه راهبران
*
آفلاین آفلاین

تعداد ارسال: 1617


« پاسخ #2 حاضر: 23 شهريور 1388,ساعت 13:01:42 »

چسبید! امیدوارم که ادامه پیدا کنه Smiley
گزارش به مدیر انجمن   خارج شده است

سادگی زیباست... برای این ماه را دوست دارم!
لیست شبه راهنماها و عکسهای دسکتاپم

سید حمید مهدوی
Hero Member
*
آفلاین آفلاین

تعداد ارسال: 781

الهی به امید تو!


WWW
« پاسخ #3 حاضر: 23 شهريور 1388,ساعت 16:42:13 »

چسبید! امیدوارم که ادامه پیدا کنه Smiley
علی آقا شما لطف دارین Smiley

سلام
خیلی عالی بود. فقط یک سوال
ببخشید اگر زیادی مبتدیه و نمیتونم سوال رو هم خوب شرح بدم (چون بلد نیستم)

mono و dotnet و البته بعضی IDE های دیگه این قابلیت رو دارند که راهنماییتون کنن. مثلا وقتی مینویسی btnHello و دکمه دات (.) رو میزنی بالفاصله لیستی از پراپرتی های اون شی رو برات میاره و یا وقتی یک تابع رو تایپ میکنی بلا فاصله بعد از اینکه پرانتز رو باز میکنی یک پیغام بهت میده و تمام شاکال مجاز برای اون تابع رو نشونت میده
این خیلی راهنمایی و کمک بزرگیه
اول اینکه جلوی غلط های املایی یا کوچک و بزرگ نوشتن دستورات رو میگیره و دوم ککه خیلی هم مهمتره اینه که برای ما تازه کارا که تمام دستور ها رو بلد نیستم میشه کمک و راهنمابیی گرفت و توابع موجود در یک کتابخونه رو همنجا در زمان کد (و نه از help) دید

سوال : آیا IDE ای در لینوکس وجود داره که این قابلیت رو در باره زبون هایی مثل پیتون و پرل و سی یا سی پلاس پلاس داشته باشه؟؟؟؟
اگه قرار باشه طبق آموزش شما محیط گرافیکی رو کد بزنیم و از qtdesigner به همون دلیلی که گفتید(ایجاد کد های بد و زیادی) صرف نظر کنیم به همچین IDE ای نیاز واجب داریم
مخصوصا در اول کار

بازم ممنون
حتما ادامه بدید

لطفا یکی از دوستان هم آموزش gtk رو شروع کنه
خیلی از ادیتور ها هستند که این کار رو توی لینوکس انجام می دن به این کار  autocomplete می گن
مثلا شما می تونید pydev رو روی eclipse نصب کنید Smiley
« آخرین ویرایش: 23 شهريور 1388,ساعت 16:53:25 توسط سید حمید مهدوی » گزارش به مدیر انجمن   خارج شده است

یا علی گفتیم و عشق آغاز شد
سید محمود رضا سجادی
Hero Member
*
آفلاین آفلاین

تعداد ارسال: 701



WWW
« پاسخ #4 حاضر: 24 شهريور 1388,ساعت 15:28:34 »

خیلی از ادیتور ها هستند که این کار رو توی لینوکس انجام می دن به این کار  autocomplete می گن
مثلا شما می تونید pydev رو روی eclipse نصب کنید Smiley

شرمنده
من eclips رو رو سیستمم دارم (از خود مخازن ورژن ۳.۲) اما همچین پکیجی تو synaptic نیست!!!
البته cdt هم توی synaptic نیست! مخزن خاصی رو باید اضافه کنم برای نصب اینا؟
گزارش به مدیر انجمن   خارج شده است

مرکز برنامه نویسی ایران
محلی برای تمامی علاقه مندان به برنامه نویسی http://www.SourceCenter.IR
سید حمید مهدوی
Hero Member
*
آفلاین آفلاین

تعداد ارسال: 781

الهی به امید تو!


WWW
« پاسخ #5 حاضر: 27 شهريور 1388,ساعت 17:07:01 »

http://www.google.com/search?q=pydev+download&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:fa:official&client=firefox-a
گزارش به مدیر انجمن   خارج شده است

یا علی گفتیم و عشق آغاز شد
سید محمود رضا سجادی
Hero Member
*
آفلاین آفلاین

تعداد ارسال: 701



WWW
« پاسخ #6 حاضر: 28 شهريور 1388,ساعت 21:58:24 »

خیلی از ادیتور ها هستند که این کار رو توی لینوکس انجام می دن به این کار  autocomplete می گن
مثلا شما می تونید pydev رو روی eclipse نصب کنید Smiley

شرمنده
من eclips رو رو سیستمم دارم (از خود مخازن ورژن ۳.۲) اما همچین پکیجی تو synaptic نیست!!!
البته cdt هم توی synaptic نیست! مخزن خاصی رو باید اضافه کنم برای نصب اینا؟


سلام عزیز
ببخشید که زود تر نیومدم
من مشکل رو خودم حل کرده بودم
پکیج مورد نظر را با apt-cache search جستجو و پیدا کردم و نصب کردم
مشکل من با synaptic بود که همچنان هم حل نشده!اگه برام مشکلی ایجاد کرد حتما تاپیک مجزا برای پیگیری این مشکل خواهم زد!

دو نکته:
۱-خیلی خیلی از اینکه پیگیری کردید ممنون
۲-قرار بود با هم pyqt یاد بگیریم پس چرا شما فقط قسمت اول آموزش رو قرار دادید؟ منتظریم ها...... لطفا این کار خیر - نیک - پسندیده و عالی رو ادامه بدید
گزارش به مدیر انجمن   خارج شده است

مرکز برنامه نویسی ایران
محلی برای تمامی علاقه مندان به برنامه نویسی http://www.SourceCenter.IR
OpenS
Full Member
*
آفلاین آفلاین

تعداد ارسال: 205



« پاسخ #7 حاضر: 29 شهريور 1388,ساعت 01:14:25 »

برای نت بینز هم این لینک که دادین کار میکنه؟؟؟
گزارش به مدیر انجمن   خارج شده است
gbmtoday
Jr. Member
*
آفلاین آفلاین

تعداد ارسال: 91

temp !


« پاسخ #8 حاضر: 16 آذر 1388,ساعت 17:23:50 »

ببخشین یه سوالی ::

مثلا تو c++ وقتی بخوای یه برنامه بنویسی اونو داخل یک فایل .cpp ذخیره می کنی
بعد واسه کامپیلش می زنی  g++ a.cpp بعد کامپیل میشه و فایل اجرایی هم ساخته میشه ...

تو PyQt چه شکلی ؟؟!!‌ اصلا کامپایل به اون معنا هست ؟!؟!
گزارش به مدیر انجمن   خارج شده است

MoOsHoK
Full Member
*
آفلاین آفلاین

تعداد ارسال: 112



« پاسخ #9 حاضر: 17 آذر 1388,ساعت 00:36:58 »

اقا C# یاد بدین
ایا اوبونتو  IDE برای C# داره؟
گزارش به مدیر انجمن   خارج شده است
gbmtoday
Jr. Member
*
آفلاین آفلاین

تعداد ارسال: 91

temp !


« پاسخ #10 حاضر: 17 آذر 1388,ساعت 19:52:16 »


ایا اوبونتو  IDE برای C# داره؟


geany
گزارش به مدیر انجمن   خارج شده است

سید محمود رضا سجادی
Hero Member
*
آفلاین آفلاین

تعداد ارسال: 701



WWW
« پاسخ #11 حاضر: 30 آذر 1388,ساعت 02:33:24 »

اقا C# یاد بدین
ایا اوبونتو  IDE برای C# داره؟


mono
البته اگه به Microsoft Visual Studio عادت کرده باشی خیلی برات سخت میشه که بیای سراغ اینا
هرچند که به نظر من خیلی بهتر از VS هستند(اما عادت رو نمیشه کاریش کرد که  Wink میشه؟ )
« آخرین ویرایش: 30 آذر 1388,ساعت 02:35:06 توسط سید محمود رضا سجادی » گزارش به مدیر انجمن   خارج شده است

مرکز برنامه نویسی ایران
محلی برای تمامی علاقه مندان به برنامه نویسی http://www.SourceCenter.IR
سعید رسولی (ilius)
High Hero Member
*
آفلاین آفلاین

تعداد ارسال: 1018


WWW
« پاسخ #12 حاضر: 30 آذر 1388,ساعت 03:29:58 »

اقا C# یاد بدین
ایا اوبونتو  IDE برای C# داره؟
آقا #C رو ولش کن! برو پایتون یا جاوا یا ++C یاد بگیر! Cheesy
گزارش به مدیر انجمن   خارج شده است

yasergol
Jr. Member
*
آفلاین آفلاین

تعداد ارسال: 97


« پاسخ #13 حاضر: 29 خرداد 1389,ساعت 19:48:49 »

شرمنده که سوالم به pyqt ربط نداره و لی به qt  ربط داره
چجوری میشه یه شی از یک کلاسی که خودمون ایجاد کردیم رو توی فایل ذخیره کنیم و از روی فایل بخونیمش
مثلا در ادامه کد زیر باید چی بنویسیم؟
کد:
class myClass
{
public:
QString a;
int b;
myClass(QString c, int d)
{
a=c;
b=d;
}
}
......
int main(...)
{
QFile file(...)
file.open(...)
file.write???????
از راهنماییتون ممنون
گزارش به مدیر انجمن   خارج شده است
fzerorubigd
Full Member
*
آفلاین آفلاین

تعداد ارسال: 206



WWW
« پاسخ #14 حاضر: 29 خرداد 1389,ساعت 21:43:01 »

به این کار میگن سریالیزه کردن اشیا توی stream
خیلی از فریم ورکها ازش پشتیبانی میکنن ولی بهتره خودت بنویسی. استفاده از اونها مستلزم استفاده از RTTI هستش و این اصلا ایده جالبی نیست (مثلا گوگل کلا استفاده از RTTI رو برای استیل خودش ممنوع کرده : http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml?showone=Run-Time_Type_Information__RTTI_#Run-Time_Type_Information__RTTI_ البته واسه ایران نمایش داده نمیشه Smiley‌)

یه متد اضافه کن و توی اون متد خودت هر کدوم از عناصر رو به ترتیب توی Stream بنویس، بعد هم یه متد دیگه بنویس به همون ترتیب اینبار از فایل بخون. این روشیه که خیلی بهتره تا کدی که خودش یه کلاس رو آنالیز کنه و ذخیره کنه.
گزارش به مدیر انجمن   خارج شده است

صفحه: [1] 2   بالا
  ارسال به دوستان  |  چاپ صفحه  
 
رفتن به: