PyQt6 - Creating an application

ساختن یک اپلیکیشن

جهت شروع، یک فایل پایتون با یک اسم دلخواه مثل app.py یا test.py ایجاد و کد زیر را داخل آن بنویسید.


from PyQt6.QtWidgets import QApplication, QWidget

# Only needed for access to command line arguments
import sys

# You need one (and only one) QApplication instance per application.
# Pass in sys.argv to allow command line arguments for your app.
# If you know you won't use command line arguments QApplication([]) works too.
app = QApplication(sys.argv)

# Create a Qt widget, which will be our window.
window = QWidget()
window.show()  # IMPORTANT!!!!! Windows are hidden by default.

# Start the event loop.
app.exec()


# Your application won't reach here until you exit and the event
# loop has stopped.

خروجی:

قبل از اینکه کد را توضیح دهیم، آن را مانند هر فایل پایتون دیگری اجرا و نتیجه را مشاهده کنید. خروجی شما با خروجی نشان داده شده در بالا بر اساس اینکه با چه سیستم عاملی کار می‌کنید ممکن است کمی متفاوت باشد. خروجی بالا در سیستم عامل ویندوز گرفته شده است.

توضیح کد

ابتدا کلاس‌های PyQt که برای اپلیکیشن نیاز داریم را وارد می‌کنیم. در اینجا QApplication مدیریت کننده اپلیکیشن و QWidget یک ویجت GUI خالی که هر دو متعلق به مدول QWidgets هستند را وارد کرده‌ایم.

from PyQt6.QtWidgets import QApplication, QWidget

در گام بعدی یک شیء از QApplication را ایجاد و آرگومان sys.arg را به آن می‌دهیم. sys.arg یک لیست پایتون، شامل آرگومان‌های command line است که به اپلیکیشن داده می‌شود.

app = QApplication(sys.argv)

اگر می‌دانید که قرار نیست با استفاده از آرگومان‌های command line اپلیکیشن Qt را کنترل کنید، می‌توانید یک لیست خالی را به صورت زیر به آن بدهید.

app = QApplication([])

در مرحله بعد یک شیء از QWidget را با استفاده از متغیری به اسم window ایجاد کرده‌ایم.

window = QWidget()
window.show()  

در Qt همه ویجت‌های سطح بالا (top level widgets) پنجره (windows) هستند. به این معنی که والدی ندارند و داخل یک ویجت یا چیدمان دیگری نیز قرار ندارند. به عبارت دیگر شما می‌توانید با استفاده از هر ویجت دلخواهی یک پنجره ایجاد کنید.

پنجره‌هایی که دارای والد نیستند، به صورت پیش‌فرض نامرئی‌اند. بنابراین بعد از ایجاد شیء window همیشه باید .show() را جهت مرئی کردن آن فراخوانی کنیم. می‌توانید .show() را از کد حذف کنید و برنامه را اجرا نمائید ولی هیچ راهی برای خارج شدن از آن نخواهید داشت!

در آخر هم app.exec() را جهت آغاز چرخه رخداد (event loop) فراخوانی کرده‌ایم.

چرخه رخداد چیست؟

در هسته هر اپلیکیشن Qt کلاس QApplication قرار دارد. هر اپلیکیشن تنها و فقط به یک شیء QtApplication جهت کار کردن نیاز دارد. این شیء چرخه رخداد اپلیکیشن شما را در خود نگه می‌دارد، چرخه اصلی که تمام برهمکنش‌های کاربر با GUI را مدیریت می‌کند.

هر برهمکنشی با اپلیکیشن شما چه فشار دادن یک کلید، کلیک کردن یک ماوس یا حرکت ماوس باشد، یک رخداد را تولید می‌کند که در صف رخدادها (event queue) قرار می‌گیرد. در چرخه رخداد، در هر تکرار، این صف بررسی می‌شود و در صورتی که رخدادی در صف انتظار پیدا شود، رخداد را به مدیریت کننده رخداد (event handler) مخصوص آن می‌فرستد. مدیریت کننده رخداد بعد از مدیریت کردن رخداد، کنترل را دوباره به چرخه رخداد می‌دهد و منتظر رخدادهای بیشتری می‌ماند. برای هر اپلیکیشن تنها یک چرخه رخداد در حال اجرا داریم.