PyQt рдХреЗ рд▓рд┐рдП MVC рдкреИрдЯрд░реНрди рд▓рд╛рдЧреВ рдХрд░рдирд╛

рд╕рднреА рдХреЛ рд╢реБрдн рджрд┐рди!
рдпрд╣ рд▓реЗрдЦ рджреЛ-рд╕рдВрдЦреНрдпрд╛ рдЬреЛрдбрд╝ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, PyQt рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП MVC рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдкреИрдЯрд░реНрди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

0 рдкрд░рд┐рдЪрдп


рдПрдорд╡реАрд╕реА - рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдЬреЛ рдЖрдкрдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдбреЗрдЯрд╛ рдореЙрдбрд▓, рдкреНрд░рд╕реНрддреБрддрд┐ рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред MVC рдореЗрдВ рддреАрди рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ , рд░рдгрдиреАрддрд┐ рдФрд░ рд▓реЗрдЖрдЙрдЯ ред рд▓реЗрдЦ рдПрд░рд┐рдХ рдлреНрд░реАрдореИрди рдХреА рдкреБрд╕реНрддрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдПрдХ рд╕рдХреНрд░рд┐рдп рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХреНрд▓рд╛рд╕рд┐рдХ рдПрдорд╡реАрд╕реА рдпреЛрдЬрдирд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред

рдЖрдЧреЗ рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

1 рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд░рдЪрдирд╛


рдЪрд▓реЛ SimpleMVC рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред рддрд╛рдХрд┐ рдХрд╛рд░реНрдп рдЗрддрдирд╛ рддреБрдЪреНрдЫ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рд╣рдо рдП рдФрд░ рдмреА рдирд╣реАрдВ , рдмрд▓реНрдХрд┐ рд╕реА рдФрд░ рдбреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЪрд╛рд░ рдореЙрдбреНрдпреВрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдореЙрдбрд▓ , рдирд┐рдпрдВрддреНрд░рдХ рдФрд░ рджреГрд╢реНрдп рдореЙрдбреНрдпреВрд▓ рдХреНрд░рдорд╢рдГ рдореЙрдбрд▓ , рдирд┐рдпрдВрддреНрд░рдХ рдФрд░ рджреГрд╢реНрдп рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред рдпреВрдЯрд┐рд▓рд┐рдЯреА рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рд╣реЛрддреЗ рд╣реИрдВред Main.pyw рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

  SimpleMVC \
     рдирд┐рдпрдВрддреНрд░рдХ \
         __init__.py
         CplusDController.py
     рдореЙрдбрд▓ \
         __init__.py
         CplusDModel.py
     рдЙрдкрдпреЛрдЧрд┐рддрд╛ \
         __init__.py
         CplusDMeta.py
         CplusDObserver.py
     рджреЗрдЦреЗрдВ
         __init__.py
         CplusDView.py
         MainWindow.py
         MainWindow.ui
     main.pyw 


2 рдПрдХ рдореЙрдбрд▓ рдмрдирд╛рдирд╛


рдореЙрдбрд▓ (рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ!) рдЖрд╡реЗрджрди рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред CplusDModel рдХрд╛ рдХрд╛рд░реНрдп рджреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЬреЛрдбрд╝ рд╣реИред CplusDModel.py рдлрд╝рд╛рдЗрд▓:

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() 


рдореЙрдбрд▓ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрдХреНрд╖рд╛ рдХреЛ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ, рд╣рдЯрд╛рдиреЗ рдФрд░ рд╕рддрд░реНрдХ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЙрдбрд▓ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдФрд░ рдЕрднреНрдпрд╛рд╡реЗрджрди рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИред
рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╕рднреА рдкрдВрдЬреАрдХреГрдд рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╕реВрдЪрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдореЙрдбрд▓ рджреНрд╡рд╛рд░рд╛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдореЙрдбрд▓рдЖрдИрд╕рдВрдЪрд╛рд▓рд┐рдд () рд╡рд┐рдзрд┐ рд╣реИ)ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреЛ рдПрдХ рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ рдХреЗ рд╡рдВрд╢рдЬ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдХрд┐ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ , рдореЙрдбрд▓рдЗрдВрд╕рдЪреЗрдВрдЬ () рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред CplusDObserver.py рдлрд╝рд╛рдЗрд▓:

 from abc import ABCMeta, abstractmethod class CplusDObserver( metaclass = ABCMeta ): """     . """ @abstractmethod def modelIsChanged( self ): """         . """ pass 


рдмреЗрд╢рдХ, "рдмрд╣реБрдд рд▓рдЪреАрд▓рд╛ рдЕрдЬрдЧрд░" рдЖрдкрдХреЛ рдПрдХ рд╕рд╛рд░ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдХреЗ рдмрд┐рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдХрд░рдиреЗ рдпрд╛ рдореБрд╢реНрдХрд┐рд▓ NotImplementedError () рдЕрдкрд╡рд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рдкреНрд░рддрд┐рдХреВрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ PyQt рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рд╕реНрд▓реЙрдЯ-рд╕рд┐рдЧреНрдирд▓ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЬрдм рд╕реНрдерд┐рддрд┐ рдмрджрд▓рддреА рд╣реИ, рддреЛ рдореЙрдбрд▓ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕рдВрдХреЗрдд рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рд╕рднреА рдЬреБрдбрд╝реЗ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрдо рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд▓рдЧрддрд╛ рд╣реИ - рд╢рд╛рдпрдж рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред
рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ, рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдкреИрдЯрд░реНрди (рдкрдВрдЬреАрдХрд░рдг, рд╡рд┐рд▓реЛрдкрди рдФрд░ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреА рдЕрдзрд┐рд╕реВрдЪрдирд╛) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╕рд╛рд░ рд╡рд░реНрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╡рд░реНрдЧ рдЕрдореВрд░реНрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

3 рдПрдХ рджреГрд╢реНрдп рдмрдирд╛рдПрдБ


рдПрдХ рджреГрд╢реНрдп рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдШрдЯрдХреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдпреЛрдЬрди рд╣реИ рдФрд░ рдПрдХ рд▓рд┐рдВрдХрд░ рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдПрдХ рджреГрд╢реНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рджреГрд╢реНрдп рд╕рдВрдкрд╛рджрдХ рдбрд┐рдЬрд╛рдЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдХрд┐ PyQt рдХреЗ рд╕рд╛рде рд╢рд╛рдорд┐рд▓ рд╣реИред рдореЗрдирд╡рд┐рдВрдбреЛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдлреЙрд░реНрдо рдмрдирд╛рдПрдБред рдЖрдХрд╛рд░ рд╕рдВрд░рдЪрдирд╛:

  рдореЗрдирд╡рд┐рдВрдбреЛ - QMainWindow
     CentralWidget - QWidget
         lbl_equal - QLabel
         lbl_plus - QLabel
         le_c - QLineEdit
         le_d - QLineEdit
         le_result - QLineEdit 


рд░реВрдк рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐:



рдкреНрд░рдкрддреНрд░ рдХрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Ctrl + R рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред MainWindow.ui рдирд╛рдо рдХреЗ рддрд╣рдд рджреГрд╢реНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВред рдЕрдм рд╣рдо рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ MainWindow.py рдлрд╝рд╛рдЗрд▓ рдЬрдирд░реЗрдЯ рдХрд░реЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, pyuic4.bat (... \ Python32 \ Lib \ рд╕рд╛рдЗрдЯ-рд╕рдВрдХреБрд▓ \ PyQt4) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ:

  pyuic4.bat ... \ SimpleMVC \ View \ MainWindow.ui -o ... \ SimpleMVC \ View \ MainWindow.py 


"..." рдХреЗ рдмрдЬрд╛рдп рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдкрде рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреВрд░рд╛ рд░рд╛рд╕реНрддрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

  D: \ Projects \ PythonProjects \ SimpleMVC \ View \ MainWindow.ui 


рдпрджрд┐ рдХреЛрдИ рд╕рдВрд╕рд╛рдзрди рдлрд╝рд╛рдЗрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдЙрд╕реЗ рдХрдирд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ pyrcc4.exe (... \ Python32 \ Lib \ рд╕рд╛рдЗрдЯ-рд╕рдВрдХреБрд▓ \ PyQt4) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрд╛рдпрдерди 3.x рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ -py3 рдзреНрд╡рдЬ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

  pyrcc4.exe -o ... \ SimpleMVC \ View \ MainWindow_rc.py -py3 ... \ SimpleMVC \ View \ MainWindow_rc.qrc 


"_Rc" рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдХреЛрдИ рд╕рдВрд╕рд╛рдзрди рдлрд╝рд╛рдЗрд▓ рд╣рдорд╛рд░реЗ рдлреЙрд░реНрдо рд╕реЗ рдЬреБрдбрд╝реА рдереА, рддреЛ pyuic4.bat рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдЧрд╛:

 import MainWindow_rc 


рдЕрдм рдЖрдкрдХреЛ рд╡реНрдпреВ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдПрдорд╡реАрд╕реА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рджреГрд╢реНрдп рдПрдХ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред CplusDView.py рдлрд╝рд╛рдЗрд▓:

 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 ) 


рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рджреГрд╢реНрдп рджреЛ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рд╡рдВрд╢рдЬ рд╣реИ: QMainWindow рдФрд░ CplusDObserver ред рджреЛрдиреЛрдВ рд╡рд░реНрдЧ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореЗрдЯрд╛рдХреНрд▓рд╛рд╕реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, CplusDView рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдореЗрдЯрд╛рдХреНрд▓рд╕ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ QMainWindow рдФрд░ CplusDObserver рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореЗрдЯрд╛рдХреНрд▓рд╛рд╕реЗрд╕ рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ CplusDMeta рд╣реИ ред CplusDMeta.py рдлрд╝рд╛рдЗрд▓:

 """   ,    . pyqtWrapperType -      Qt. ABCMeta -     . CplusDMeta -   . """ from PyQt4.QtCore import pyqtWrapperType from abc import ABCMeta class CplusDMeta( pyqtWrapperType, ABCMeta ): pass 


4 рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдирд╛


рдирд┐рдпрдВрддреНрд░рдХ рдкреИрдЯрд░реНрди рд░рдгрдиреАрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдирд┐рдпрдВрддреНрд░рдХ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреГрд╢реНрдп рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд╣реБрдд рддреБрдЪреНрдЫ рд╣реИред CplusDController.py рдлрд╝рд╛рдЗрд▓:

 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 ) 


5 рдШрдЯрдХреЛрдВ рдХрд╛ рдХрдиреЗрдХреНрд╢рди


рдпрд╣ рд╕рднреА рдШрдЯрдХреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рдореЗрдирд╣реЛрдо рдлрд╝рд╛рдЗрд▓:

 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/In139454/


All Articles