SimpleMVC \ Controller \ __init__.py CplusDController.py Model \ __init__.py CplusDModel.py Utility \ __init__.py CplusDMeta.py CplusDObserver.py View \ __init__.py CplusDView.py MainWindow.py MainWindow.ui main.pyw
class CplusDModel: """ CplusDModel . c, d . , . , . """ def __init__( self ): self._mC = 0 self._mD = 0 self._mSum = 0 self._mObservers = [] # @property def c( self ): return self._mC @property def d( self ): return self._mD @property def sum( self ): return self._mSum @c.setter def c( self, value ): self._mC = value self._mSum = self._mC + self._mD self.notifyObservers() @d.setter def d( self, value ): self._mD = value self._mSum = self._mC + self._mD self.notifyObservers() def addObserver( self, inObserver ): self._mObservers.append( inObserver ) def removeObserver( self, inObserver ): self._mObservers.remove( inObserver ) def notifyObservers( self ): for x in self._mObservers: x.modelIsChanged()
from abc import ABCMeta, abstractmethod class CplusDObserver( metaclass = ABCMeta ): """ . """ @abstractmethod def modelIsChanged( self ): """ . """ pass
MainWindow - QMainWindow CentralWidget - QWidget lbl_equal - QLabel lbl_plus - QLabel le_c - QLineEdit le_d - QLineEdit le_result - QLineEdit
pyuic4.bat ... \ SimpleMVC \ View \ MainWindow.ui -o ... \ SimpleMVC \ View \ MainWindow.py
D: \ Projects \ PythonProjects \ SimpleMVC \ View \ MainWindow.ui
pyrcc4.exe -o ... \ SimpleMVC \ View \ MainWindow_rc.py -py3 ... \ SimpleMVC \ View \ MainWindow_rc.qrc
import MainWindow_rc
from PyQt4.QtGui import QMainWindow, QDoubleValidator from PyQt4.QtCore import SIGNAL from Utility.CplusDObserver import CplusDObserver from Utility.CplusDMeta import CplusDMeta from View.MainWindow import Ui_MainWindow class CplusDView( QMainWindow, CplusDObserver, metaclass = CplusDMeta ): """ CplusDModel. """ def __init__( self, inController, inModel, parent = None ): """ . """ super( QMainWindow, self ).__init__( parent ) self.mController = inController self.mModel = inModel # self.ui = Ui_MainWindow() self.ui.setupUi( self ) # self.mModel.addObserver( self ) # self.ui.le_c.setValidator( QDoubleValidator() ) self.ui.le_d.setValidator( QDoubleValidator() ) # self.connect( self.ui.le_c, SIGNAL( "editingFinished()" ), self.mController.setC ) self.connect( self.ui.le_d, SIGNAL( "editingFinished()" ), self.mController.setD ) def modelIsChanged( self ): """ . . """ sum = str( self.mModel.sum ) self.ui.le_result.setText( sum )
""" , . pyqtWrapperType - Qt. ABCMeta - . CplusDMeta - . """ from PyQt4.QtCore import pyqtWrapperType from abc import ABCMeta class CplusDMeta( pyqtWrapperType, ABCMeta ): pass
from View.CplusDView import CplusDview class CplusDController(): """ CplusDController . . """ def __init__( self, inModel ): """ . . """ self.mModel = inModel self.mView = CplusDview( self, self.mModel ) self.mView.show() def setC( self ): """ C, c . """ c = self.mView.ui.le_c.text() self.mModel.c = float( c ) def setD( self ): """ D, d . """ d = self.mView.ui.le_d.text() self.mModel.d = float( d )
import sys from PyQt4.QtGui import QApplication from Model.CplusDModel import CplusDModel from Controller.CplusDController import CplusDController def main(): app = QApplication( sys.argv ) # model = CplusDModel() # controller = CplusDController( model ) app.exec() if __name__ == '__main__': sys.exit( main() )
Source: https://habr.com/ru/post/139454/
All Articles