درس ششم: یادگیری مبانی (پنجره‌های اصلی)

15 اردیبهشت 1399
pyqt-06

main windows یا پنجره های اصلی در PyQt

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

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

  • یک نوار منو: در بالای پنجره است و منوی اصلی برنامه را داراست. (در بیشتر برنامه های تحت ویندوز اغلب دارای منوی file ،edit و... می باشد)
  • تعدادی نوار ابزار: در کناره های پنجره قرار می گیرند و مناسب برای نگهداری دکمه های ابزاری و دیگر انواع ویجت ها مثل QComboBox ،QSpinBox و... می باشند (در برخی نرم افزارها این جعبه ابزار را در کناره ی چپ برنامه مشاهده می کنید که شامل دکمه هایی با آیکون های منحصربفرد برای انجام عملیات خاص قرار گرفته اند؛ مثل برنامه ی فتوشاپ و سالیدورکز)
  • یک ویجت مرکزی: در مرکز پنجره که می تواند از هر نوع مفرد و یا ترکیبی باشد.
  • چند ویجت لنگرگاهی: اطراف ویجت مرکزی قرار دارند. ویجت های لنرگاهی پنجره های کوچک قابل حرکت می باشند (در برخی نرم افزارها با کلیک کردن روی ابزار یا یک دستور از منو، پنجره های کوچکی را می بینید که شامل جزییات دستور کلی می باشند و می توانید این پنجره ها را حرکت و تغییر اندازه بدهید. اغلب اوقات به هر یک از این پنجره ها در کنار همدیگر tab نیز گفته می شود.)
  • یک نوار وضعیت: در ته پنجره، اطلاعاتی از وضعیت کلی برنامه را نشان می دهد. (در رابط کاربری نرم افزارهای طراحی بزرگ دیده می شود که از این نوار برای نشان دادن موقعیت و مختصات نکاتی که نشانه گر ماوس در ان قرار گرفته استفاده می شود؛ مثل نرم افزار اتوکد و کورل)

بدون ایجاد کردن ویجت مرکزی در اولین وهله نمی توانید پنجره ی اصلی را ایجاد کنید. باید ویجت مرکزی را داشته باشید حتی اگر فقط یک placeholder باشد. وقتی اینچنین است می توانید از یک شئ QWidget به عنوان ویجت مرکزی استفاده نمایید. ویجت مرکزی پنجره ی اصلی را با متد ()setCentralWidget. تنظیم کنید. چیدمان و قالب پنجره ی اصلی اجازه وجود فقط یک ویجت مرکزی را می دهد اما می تواند یک ویجت مفرد یا مرکب باشد.

کد زیر نحوه یاستفاده از QMainWindow برای ایجاد برنامه به سبک پنجره محور را نشان می دهد:

# Filename: main_window.py

"""Main Window-Style application."""

import sys

from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QLabel
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QStatusBar
from PyQt5.QtWidgets import QToolBar

class Window(QMainWindow):
    """Main Window."""
    def __init__(self, parent=None):
        """Initializer."""
        super().__init__(parent)
        self.setWindowTitle('QMainWindow')
        self.setCentralWidget(QLabel("I'm the Central Widget"))
        self._createMenu()
        self._createToolBar()
        self._createStatusBar()

    def _createMenu(self):
        self.menu = self.menuBar().addMenu("&Menu")
        self.menu.addAction('&Exit', self.close)

    def _createToolBar(self):
        tools = QToolBar()
        self.addToolBar(tools)
        tools.addAction('Exit', self.close)

    def _createStatusBar(self):
        status = QStatusBar()
        status.showMessage("I'm the Status Bar")
        self.setStatusBar(status)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec_())

 

اینجا نحوه ی کار این کد را بیان می کنیم:

  • خط 13 یک کلاس که از QMainWindow ارث می برد را ایجاد می کند. (کلاس window)
  • خط 18 عنوان پنجره را تعیین می کند.
  • خط 19 QLabel را به عنوان ویجت مرکزی تنظیم می کند.
  • خط 20 تا 22 متدهای خصوصی در خطوط زیر را که به منظور ایجاد عناصر مختلف رابط گرافیکی هستند، فراخوانی می کنند:
  • خط 24 تا 26 منوی اصلی را ایجاد می کند.
  • خط 28 تا 31 نوار ابزار را ایجاد می کند.
  • خط 33 تا 36 نوار وضعیت را ایجاد می کند.

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

وقتی کد بالا را اجرا کنید پنجره ای مانند زیر را خواهید دید:

می بینید که برنامه ی پنجره محور شما دارای اجزای زیر می باشد:

  • یک منوی اصلی به نام menu
  • یک نوار ابزار با دکمه ی تابع گرای خروج (Exit)
  • یک ویجت مرکزی (شئئ از QLabel )
  • یک نوار وضعیت در زیر پنجره

تا اینجا بخشی از مهم ترین اجزای گرافیکی از مجموعه ویجت های PyQt5 را تحت پوشش قرار دادید. در دروس آتی مفاهیم دیگر مرتبط با رابط گرافیکی PyQt5 را یاد خواهید گرفت.


منبع: سایت Real Python

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری ساخت ماشین حساب گرافیکی با PyQt توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما (2 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

داود
25 مهر 1402
کد بالا را که اجرا کردم خطای زیر برام اومدم که از متد sipPyTypeDictRef استفاده کنید و متد ()sipPyTypeDict منسوخ شده

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

طاها گودرزی
10 بهمن 1400
سلام من داخل pyqt‌م l I ا - نشون داده نمیشن چکار کنم؟

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.