یک بار که لایه ی مدل ماشین حساب را تکمیل کردید، می توانید کنترلگر را نیز بدنبال آن تکمیل نمایید. ورژن نهایی PyCalcCtrl
شامل منطق برای پردازش محاسبات و اطمینان حاصل کردن از کارکرد علامت مساوی (=
) می باشد:
# Create a Controller class to connect the GUI and the model class PyCalcCtrl: """PyCalc's Controller.""" def __init__(self, model, view): """Controller initializer.""" self._evaluate = model self._view = view # Connect signals and slots self._connectSignals() def _calculateResult(self): """Evaluate expressions.""" result = self._evaluate(expression=self._view.displayText()) self._view.setDisplayText(result) def _buildExpression(self, sub_exp): """Build expression.""" if self._view.displayText() == ERROR_MSG: self._view.clearDisplay() 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['='].clicked.connect(self._calculateResult) self._view.display.returnPressed.connect(self._calculateResult) self._view.buttons['C'].clicked.connect(self._view.clearDisplay)
ابتدا پارامتر جدید به تابع init اضافه می کنید. حالا کلاس نمونه هایی را از هر دوی لایه های مدل و نمایش دریافت می کنید. سپس با ()calculateResult_. محتوای صفحه ماشین حساب را گرفته و تبدیل به عبارت ریاضی می کند و نهایتا حاصل را در صفحه نمایش می دهد.
همچنین شما ساحتار شرطی if را به ()buildExpression_. برای بررسی اینکه آیا خطایی رخ داده یا نه اضافه می کنید. اگر رخ دهد صفحه را پاکسازی کرده و دوباره با یک عبارت جدید آغاز می کنید. در نهایت دو اتصال جدید داخل ()connectSignals_. می افزایید. اولی کارکرد علامت مساوی را موجب شده و دومی منجر به پردازش عبارت موقع فشردن دکمه ی Enter توسط کاربر می گردد.
برای اینکه همه ی این کدها کار کنند، نیاز به بروزرسانی کدهای ()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 model = evaluateExpression PyCalcCtrl(model=model, view=view) # Execute calculator's main loop sys.exit(pycalc.exec_())
اینجا model
شما یک ارجاع به متد ()evaluateExpression را نگهداری می کند. به علاوه حالا ()PyCalcCtrl دو ارگومان را دریافت می کند: model و view
منبع: سایت Real Python
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.