درس دوازدهم: ساخت کنترلگر ساده

07 اردیبهشت 1399
pyqt12

ساخت کنترلگر ساده

در این بخش قرار است کلاس لایه ی کنترلگر ماشین حساب را کدنویسی کنیم. این کلاس لایه ی نمایشی را به لایه ی مدل متصل خواهد کرد. از کلاس کنترلگر برای انجام عملیاتی در راستای پاسخگویی به رویدادهای کاربر استفاده خواهد شد. با دستور import زیر کار را آغاز می کنید:

from functools import partial

در بالای فایل pycalc.py، با استفاده از دستور بالا ()partial را برای برقراری اتصال بین سیگنال ها و متدهایی که نیاز به گرفتن ارگومان های اضافی دارند، وارد برنامه می کنید.

کلاس کنترلگرتان باید سه کار اصلی زیر را انجام دهد:

  1. دسترسی به رابط عمومی GUI داشته باشد.
  2. ایجاد عبارت های ریاضی را اداره کند.
  3. سیگنال مربوط به کلیک دکمه هارا به اسلات های متناظرش متصل کند.

با این سه عمل مطمئن خواهید بود که ماشین حساب به درستی کار خواهد کرد. در زیر نحوه ی کدنویسی این کلاس آمده است:

# Create a Controller class to connect the GUI and the model
class PyCalcCtrl:
    """PyCalc Controller class."""
    def __init__(self, view):
        """Controller initializer."""
        self._view = view
        # Connect signals and slots
        self._connectSignals()

    def _buildExpression(self, sub_exp):
        """Build expression."""
        expression = self._view.displayText() + sub_exp
        self._view.setDisplayText(expression)

    def _connectSignals(self):
        """Connect signals and slots."""
        for btnText, btn in self._view.buttons.items():
            if btnText not in {'=', 'C'}:
                btn.clicked.connect(partial(self._buildExpression, btnText))

        self._view.buttons['C'].clicked.connect(self._view.clearDisplay)

اولین کاری که انجام می دهید، دادن یک نمونه از کلاس PyCalcUi لایه ی نمایش به PyCalcCtrl می باشد. از این نمونه برای کسب دسترسی به رابط عمومی لایه ی نمایش استفاده خواهید کرد. سپس ()buildExpression_. را برای رسیدگی به ایجاد عبارات ریاضی می سازید. این متد همچنین با پاسخگویی به ورودی کاربر، صفحه ی خروجی ماشین حساب را بروز رسانی می کند.

در نهایت از ()connectSignals_. برای متصل کردن دکمه های قابل چاپ (printable buttons) به ()buildExpression_. استفاده می کنید. این عمل امکان ایجاد عبارات ریاضی با کلیک روی دکمه ها را به کاربر می دهد. در خط آخر نیز دکمه ی پاکسازی (C) را به ()view.clearDisplay_. متصل می کنید. این متد، متن موجود در صفحه ی خروجی ماشین حساب را پاکسازی می کند.

برای این که کلاس کنترلگر ساخته شده کار کند، باید تغییراتی را در ()main ایجاد کنید:

# Client code
def main():
    """Main function."""
    # Create an instance of QApplication
    pycalc = QApplication(sys.argv)
    # Show the calculator's GUI
    view = PyCalcUi()
    view.show()
    # Create instances of the model and the controller
    PyCalcCtrl(view=view)
    # Execute calculator's main loop
    sys.exit(pycalc.exec_())

این کد یک نمونه از (PyCalcCtrl(view=view با view به عنوان آرگومان آن، ایجاد می کند. این موجب اجرای عمل مقداردهی اولیه و اتصال سیگنال ها و اسلات ها به یکدیگر برای عملکرد ماشین حساب می شود.

اگر این برنامه را اجرا کنید، با پنجره ی زیر مواجه خواهید شد:

همانطور که ملاحظه می کنید ماشین حساب حالا عملکرد دارد! حال می توانید عبارات ریاضی را با کلیک روی دکمه ها در روی صفحه ایجاد کنید. توجه داشته باشید که فعلا دکمه ی مساوی کار نمی کند. برای تصحیح آن نیاز به پیاده سازی لایه ی مدل داریم.


منبع: سایت Real Python

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

دیدگاه‌های شما

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