das Thema MVC hatte ich schon mal vor längerer Zeit in einem anderen Thread angesprochen. Viele von euch erinnern sich sicher sehr gut daran. Allerdings habe ich das Thema erst einmal fallen gelassen, weil ich mich nicht fit genug fühlte. Nun dachte ich mir, wage ich mich noch einmal an das Thema heran. Dazu habe ich ein kleines ausführbares Programm geschrieben- siehe unten. In meinem Beispiel werden zwei gleiche Fenster geladen. In einem Fenster soll gerechnet, und das Ergebnis soll dann in beiden Fenstern angezeigt werden.
Mein Augenmerk lag darauf, dass ich ein MVC-Design ohne Qt-Rahmenwerk erstelle. Mein Programm funktioniert, und augenscheinlich macht es auch das, was es tun soll. Vergessen wir mal all die Sicherheitsmechanismen etc. Dies ist nur ein reines Beispiel-Programm. Bevor ich mich noch intensiver in das Thema einarbeiten und euch dann mit weiteren Fragen nerven werde, möchte ich euch zunächst einmal fragen, ob mein Beispielprogramm genau dem MVC-Schema entspricht? Bin ich der Sache recht nahe? Oder gibt es noch Anmerkungen etc?
Ich frage nur deshalb, weil die Controller()-Klasse ganz schön viel über die UI weiß.
Code: Alles auswählen
from PyQt4.QtGui import QPushButton, QWidget, QApplication, \
QLineEdit, QVBoxLayout
import sys
class CustomModel(object):
def calculate_it(self, a, b):
return a*b
class CustomController(object):
def __init__(self):
self.view_window = Window(self.calculator)
self.custom_model = CustomModel()
self.view_window_1 = Window(None)
self.view_window.show()
self.view_window_1.show()
def calculator(self, a, b):
# Work with data
self.view_window.result_line_edit.setText((unicode(self.custom_model.calculate_it(int(a), int(b)))))
self.view_window_1.result_line_edit.setText((unicode(self.custom_model.calculate_it(int(a), int(b)))))
class Window(QWidget):
def __init__(self, callback_calculate):
QWidget.__init__(self, parent=None)
self.callback_calculate = callback_calculate
self.calculate_pushButton = QPushButton()
self.calculate_pushButton.setText("Calculate")
self.calculate_pushButton.clicked.connect(self.calc)
self.close_pushButton = QPushButton()
self.close_pushButton.setText("Close")
self.close_pushButton.clicked.connect(self.unload_me)
self.first_line_edit = QLineEdit()
self.second_line_edit = QLineEdit()
self.result_line_edit = QLineEdit()
self.result_line_edit.setReadOnly(True)
v_layout = QVBoxLayout()
v_layout.addWidget(self.first_line_edit)
v_layout.addWidget(self.second_line_edit)
v_layout.addWidget(self.result_line_edit)
v_layout.addWidget(self.calculate_pushButton)
v_layout.addWidget(self.close_pushButton)
self.setLayout(v_layout)
def calc(self):
a = unicode(self.first_line_edit.text())
b = unicode(self.second_line_edit.text())
self.callback_calculate(a, b)
def unload_me(self):
self.close()
def main():
app = QApplication(sys.argv)
window = CustomController()
sys.exit(app.exec_())
if __name__ == '__main__':
main()