PyQt6 - QMainWindow

QMainWindow

چنانکه در بخش قبل گفتیم، در Qt هر ویجتی می‌تواند پنجره باشد. برای مثال، در کد زیر تنها بوسیله QPushButton یک پنجره با تنها یک دکمه قابل کلیک ایجاد می‌شود.


import sys
from PyQt6.QtWidgets import QApplication, QPushButton

app = QApplication(sys.argv)

window = QPushButton("Push Me")
window.show()

app.exec()

خروجی:

این مسئله هر چند جالب به نظر می‌رسد ولی خیلی کاربردی نیست. خیلی بعید است که یک UI شامل تنها یک دکمه قابل کلیک نیاز داشته باشید! اما چنانکه در بخش بعدی در خواهید یافت، توانایی قرار دادن یک ویجت داخل ویجت دیگر با استفاده از چیدمان (layouts) به معنی آن است که می‌توانید UIهای پیچیده را داخل یک Qwidget خالی بسازید.

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


import sys
from PyQt6.QtWidgets import QApplication, QMainWindow

app = QApplication(sys.argv)

window = QMainWindow()
window.show()

# Start the event loop.
app.exec()

خروجی:

چنانکه ملاحظه می‌کنید الان پنجره اصلی اپلیکیشن را داریم که در ظاهر هیچ تفاوتی با قبل ندارد.

اگر می‌خواهید یک پنجره دلخواه داشته باشید، بهترین رویکرد آن است که یک زیر کلاس از QMainWindow ایجاد و سپس تنظیمات پنجره را در بلوک __init__ اعمال کنید. در کد زیر اسم کلاس خود را که از کلاس QMainWindow به ارث می‌برد جهت سادگی MainWindow گذاشته‌ایم.


import sys

from PyQt6.QtCore import QSize, Qt
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton


# Subclass QMainWindow to customize your application's main window
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("My App")
        button = QPushButton("Press Me!")

        # Set the central widget of the Window.
        self.setCentralWidget(button)


app = QApplication(sys.argv)

window = MainWindow()
window.show()

app.exec()

خروجی:

برای این مثال از QPushButton استفاده کرده‌ایم. در هنگام استفاده از QMainWindow از .setCentralWidget() جهت قرار دادن ویجت مورد نظر (در اینجا QPushButton) در QMainWindow استفاده می‌کنیم. به صورت پیش‌فرض کل پنجره را پوشش می‌دهد. نحوه اضافه کردن چندین ویجت به پنجره را در بخش نحوه چیدمان آموزش می‌دهیم.

هنگامی که از یک کلاس Qt می‌خواهید به ارث ببرید، همیشه باید تابع super().__init__() را فراخوانی کنید تا Qt تنظیمات شیء را انجام دهد.

در تابع __init__ خود، اول از .setWindowTitle() جهت تغییر عنوان پنجره اصلی استفاده کرده‌ایم. سپس اولین ویجت خود، یک QPushButton را به وسط پنجره اضافه کرده‌ایم. این ویجت یکی از ویجت‌های اساسی در دسترس در Qt است. در هنگام ایجاد یک دکمه، می‌توانید متنی را که دکمه نشان می‌دهد به آن بدهید.

در نهایت .setCentralWidget() را روی پنجره فراخوانی کرده‌ایم. این یک تابع مخصوص QMainWindow است که به شما این امکان را می‌دهد تا ویجت را در وسط پنجره قرار دهید.