یک بار که لایه ی مدل ماشین حساب را تکمیل کردید، می توانید کنترلگر را نیز بدنبال آن تکمیل نمایید. ورژن نهایی 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
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.