PyQt6 - Creating an application
ساختن یک اپلیکیشن
جهت شروع، یک فایل پایتون با یک اسم دلخواه مثل app.py یا test.py ایجاد و کد زیر را داخل آن بنویسید.
قبل از اینکه کد را توضیح دهیم، آن را مانند هر فایل پایتون دیگری اجرا و نتیجه را مشاهده کنید. خروجی شما با خروجی نشان داده شده در بالا بر اساس اینکه با چه سیستم عاملی کار میکنید ممکن است کمی متفاوت باشد. خروجی بالا در سیستم عامل ویندوز گرفته شده است.
توضیح کد
ابتدا کلاسهای PyQt که برای اپلیکیشن نیاز داریم را وارد میکنیم. در اینجا QApplication
مدیریت کننده اپلیکیشن و QWidget
یک ویجت GUI خالی که هر دو متعلق به مدول QWidgets
هستند را وارد کردهایم.
در گام بعدی یک شیء از QApplication
را ایجاد و آرگومان sys.arg
را به آن میدهیم. sys.arg
یک لیست پایتون، شامل آرگومانهای command line است که به اپلیکیشن داده میشود.
اگر میدانید که قرار نیست با استفاده از آرگومانهای command line اپلیکیشن Qt را کنترل کنید، میتوانید یک لیست خالی را به صورت زیر به آن بدهید.
در مرحله بعد یک شیء از QWidget
را با استفاده از متغیری به اسم window
ایجاد کردهایم.
window.show()
در Qt همه ویجتهای سطح بالا (top level widgets) پنجره (windows) هستند. به این معنی که والدی ندارند و داخل یک ویجت یا چیدمان دیگری نیز قرار ندارند. به عبارت دیگر شما میتوانید با استفاده از هر ویجت دلخواهی یک پنجره ایجاد کنید.
window
همیشه باید .show()
را جهت مرئی کردن آن فراخوانی کنیم. میتوانید .show()
را از کد حذف کنید و برنامه را اجرا نمائید ولی هیچ راهی برای خارج شدن از آن نخواهید داشت!
در آخر هم app.exec()
را جهت آغاز چرخه رخداد (event loop) فراخوانی کردهایم.
چرخه رخداد چیست؟
در هسته هر اپلیکیشن Qt کلاس QApplication
قرار دارد. هر اپلیکیشن تنها و فقط به یک شیء QtApplication
جهت کار کردن نیاز دارد. این شیء چرخه رخداد اپلیکیشن شما را در خود نگه میدارد، چرخه اصلی که تمام برهمکنشهای کاربر با GUI را مدیریت میکند.
هر برهمکنشی با اپلیکیشن شما چه فشار دادن یک کلید، کلیک کردن یک ماوس یا حرکت ماوس باشد، یک رخداد را تولید میکند که در صف رخدادها (event queue) قرار میگیرد. در چرخه رخداد، در هر تکرار، این صف بررسی میشود و در صورتی که رخدادی در صف انتظار پیدا شود، رخداد را به مدیریت کننده رخداد (event handler) مخصوص آن میفرستد. مدیریت کننده رخداد بعد از مدیریت کردن رخداد، کنترل را دوباره به چرخه رخداد میدهد و منتظر رخدادهای بیشتری میماند. برای هر اپلیکیشن تنها یک چرخه رخداد در حال اجرا داریم.