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

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

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

اوبونتو ۲۴٫۰۴ با پشتیبانی بلند مدّت (۱۲ سال) منتشر شد 🎉

نویسنده موضوع: PyQt : با هم یاد بگیریم :)  (دفعات بازدید: 102057 بار)

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

آفلاین sahama

  • Hero Member
  • *
  • ارسال: 784
  • جنسیت : پسر
  • الهی به امید تو!
PyQt : با هم یاد بگیریم :)
« : 23 شهریور 1388، 11:13 ق‌ظ »
سلام به همه
گفته شده که یاد گیری بر هر کسی واجبه و از طرفی کسی که چیزی رو یاد گرفت باید زکاتش رو بده :)
حالا ما (من بعلاوه هر کسی که دوست داره) می خوایم 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 هست. البته این یه خورده اخطیاریه توجه کنید که فقط یه خورده  ;D
توی آرگمان چهارم هم عملی که در قبال گرفتن این پیام انجام می شه رو توضیح دادیم که همون خروجه
توی یه خط هم نوی قلم رو مشخص کردیم که نیاز به توضیح نداره
فکر نمی کنم شما بخواین برنامه ای بسازید که فقط یه دکمه توش باشه پس لازمه که طرح بندی ها رو یاد بگیریم چطوری؟
می گم الان اینو داشته باشید:

#!/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 می تونید طرح بندی کنید ولی من خودم خوشم نیومد (کد بی مصرف زیادی تولید میکنه) گرچه آینده اونو هم توضیح می دم
پایان جلسه اول
بعدا در مورد مجوز این نوشته هم فکر می کنم الان بی مجوزه :o
تا یادم نرفته با نظرات مفید خودتون ما رو به نوشتن دلگرم فرمایید (شد مثل وبلاگا)
« آخرین ویرایش: 23 شهریور 1388، 11:14 ق‌ظ توسط سید حمید مهدوی »
یا علی

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

  • Hero Member
  • *
  • ارسال: 704
  • جنسیت : پسر
    • مرکز برنامه نویسی ایران
پاسخ به: PyQt : با هم یاد بگیریم :)
« پاسخ #1 : 23 شهریور 1388، 01:26 ب‌ظ »
سلام
خیلی عالی بود. فقط یک سوال
ببخشید اگر زیادی مبتدیه و نمیتونم سوال رو هم خوب شرح بدم (چون بلد نیستم)

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

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

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

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

lomion

  • مهمان
پاسخ به: PyQt : با هم یاد بگیریم :)
« پاسخ #2 : 23 شهریور 1388، 02:01 ب‌ظ »
چسبید! امیدوارم که ادامه پیدا کنه :)

آفلاین sahama

  • Hero Member
  • *
  • ارسال: 784
  • جنسیت : پسر
  • الهی به امید تو!
پاسخ به: PyQt : با هم یاد بگیریم :)
« پاسخ #3 : 23 شهریور 1388، 05:42 ب‌ظ »
چسبید! امیدوارم که ادامه پیدا کنه :)
علی آقا شما لطف دارین :)

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

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

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

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

لطفا یکی از دوستان هم آموزش gtk رو شروع کنه
خیلی از ادیتور ها هستند که این کار رو توی لینوکس انجام می دن به این کار  autocomplete می گن
مثلا شما می تونید pydev رو روی eclipse نصب کنید :)
« آخرین ویرایش: 23 شهریور 1388، 05:53 ب‌ظ توسط سید حمید مهدوی »
یا علی

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

  • Hero Member
  • *
  • ارسال: 704
  • جنسیت : پسر
    • مرکز برنامه نویسی ایران
پاسخ به: پاسخ به: PyQt : با هم یاد بگیریم :)
« پاسخ #4 : 24 شهریور 1388، 04:28 ب‌ظ »
خیلی از ادیتور ها هستند که این کار رو توی لینوکس انجام می دن به این کار  autocomplete می گن
مثلا شما می تونید pydev رو روی eclipse نصب کنید :)

شرمنده
من eclips رو رو سیستمم دارم (از خود مخازن ورژن ۳.۲) اما همچین پکیجی تو synaptic نیست!!!
البته cdt هم توی synaptic نیست! مخزن خاصی رو باید اضافه کنم برای نصب اینا؟
مرکز برنامه نویسی ایران
محلی برای تمامی علاقه مندان به برنامه نویسی http://www.SourceCenter.IR

آفلاین sahama

  • Hero Member
  • *
  • ارسال: 784
  • جنسیت : پسر
  • الهی به امید تو!
یا علی

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

  • Hero Member
  • *
  • ارسال: 704
  • جنسیت : پسر
    • مرکز برنامه نویسی ایران
پاسخ به: پاسخ به: PyQt : با هم یاد بگیریم :)
« پاسخ #6 : 28 شهریور 1388، 10:58 ب‌ظ »
خیلی از ادیتور ها هستند که این کار رو توی لینوکس انجام می دن به این کار  autocomplete می گن
مثلا شما می تونید pydev رو روی eclipse نصب کنید :)

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

http://www.google.com/search?q=pydev+download&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:fa:official&client=firefox-a

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

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

آفلاین OpenS

  • Full Member
  • *
  • ارسال: 213
پاسخ به: PyQt : با هم یاد بگیریم :)
« پاسخ #7 : 29 شهریور 1388، 02:14 ق‌ظ »
برای نت بینز هم این لینک که دادین کار میکنه؟؟؟

آفلاین gbmtoday

  • Jr. Member
  • *
  • ارسال: 98
  • temp !
پاسخ به: PyQt : با هم یاد بگیریم :)
« پاسخ #8 : 16 آذر 1388، 05:23 ب‌ظ »
ببخشین یه سوالی ::

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

تو PyQt چه شکلی ؟؟!!‌ اصلا کامپایل به اون معنا هست ؟!؟!

آفلاین MoOsHoK

  • Full Member
  • *
  • ارسال: 112
پاسخ به: PyQt : با هم یاد بگیریم :)
« پاسخ #9 : 17 آذر 1388، 12:36 ق‌ظ »
اقا C# یاد بدین
ایا اوبونتو  IDE برای C# داره؟

آفلاین gbmtoday

  • Jr. Member
  • *
  • ارسال: 98
  • temp !
پاسخ به: PyQt : با هم یاد بگیریم :)
« پاسخ #10 : 17 آذر 1388، 07:52 ب‌ظ »

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


geany

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

  • Hero Member
  • *
  • ارسال: 704
  • جنسیت : پسر
    • مرکز برنامه نویسی ایران
پاسخ به: PyQt : با هم یاد بگیریم :)
« پاسخ #11 : 30 آذر 1388، 02:33 ق‌ظ »
اقا C# یاد بدین
ایا اوبونتو  IDE برای C# داره؟


mono
البته اگه به Microsoft Visual Studio عادت کرده باشی خیلی برات سخت میشه که بیای سراغ اینا
هرچند که به نظر من خیلی بهتر از VS هستند(اما عادت رو نمیشه کاریش کرد که  ;) میشه؟ )
« آخرین ویرایش: 30 آذر 1388، 02:35 ق‌ظ توسط سید محمود رضا سجادی »
مرکز برنامه نویسی ایران
محلی برای تمامی علاقه مندان به برنامه نویسی http://www.SourceCenter.IR

آفلاین سعید رسولی

  • ilius, saeedgnu
  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1543
  • جنسیت : پسر
پاسخ به: PyQt : با هم یاد بگیریم :)
« پاسخ #12 : 30 آذر 1388، 03:29 ق‌ظ »
اقا C# یاد بدین
ایا اوبونتو  IDE برای C# داره؟
آقا #C رو ولش کن! برو پایتون یا جاوا یا ++C یاد بگیر! :D

آفلاین yasergol

  • Full Member
  • *
  • ارسال: 117
پاسخ به: PyQt : با هم یاد بگیریم :)
« پاسخ #13 : 29 خرداد 1389، 08:48 ب‌ظ »
شرمنده که سوالم به 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

  • Hero Member
  • *
  • ارسال: 758
  • جنسیت : پسر
  • گوگل دوست خوبیه، فقط باید ازش بپرسی
    • یادداشتهای بیت نیمسوز
پاسخ به: PyQt : با هم یاد بگیریم :)
« پاسخ #14 : 29 خرداد 1389، 10:43 ب‌ظ »
به این کار میگن سریالیزه کردن اشیا توی stream
خیلی از فریم ورکها ازش پشتیبانی میکنن ولی بهتره خودت بنویسی. استفاده از اونها مستلزم استفاده از RTTI هستش و این اصلا ایده جالبی نیست (مثلا گوگل کلا استفاده از RTTI رو برای استیل خودش ممنوع کرده : http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml?showone=Run-Time_Type_Information__RTTI_#Run-Time_Type_Information__RTTI_ البته واسه ایران نمایش داده نمیشه :)‌)

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