so langsam rücke ich dem Thema "MVC" näher. Ich habe mir vor allem dieses Beispiel angeschaut. Hier wird in einem kleinen Beispiel gezeigt, dass man für MVC mindestens drei Module braucht, eins für den Controller, View und Model. Und gestern wollte ich für mich ein kleines Programm schreiben, den ich euch hier gleich vorstellen werde. Es ging mir darum, dass ich eine Kommunikation zwischen (erst einmal) zwei Fenster herstelle. Konkret: Ich habe eine Form in dem nur eine LineEdit ist, und eine zweite Form, in dem nur ein ListWidget ist. Gebe ich in Form 1 in der LineEdit was ein, betätige die Schaltfläche, soll diese Information in Form 2 in der ListWidget landen. Und da kam ich auf das Thema MVC. Der Grundgedanke ist ja schön, das man alles trennen möchte, aber auch irgendwie aufwändig. Man stelle sich nachher vor, für jede Angelegenheit eine MVC-Konstellation. Jedesmal mindestens drei Module, ehe das klappt was man will. Und da dachte ich, ob es eine Möglichkeit gäbe. Ich habe ja nun die Erfahrung mit QThread gemacht, und daran habe ich dann auch angesetzt. Hier nun mein ausführbares Progrämmchen:
ListWidget_Form.py
Code: Alles auswählen
import sys
from PyQt4.QtCore import Qt, pyqtSignal
from PyQt4.QtGui import QVBoxLayout, QPushButton, QDialog, QListWidget, QApplication, QWidget
from LineEdit_Form import LineEdit_Window
class ListWidget_Window(QDialog):
def __init__( self, parent=None):
QDialog.__init__( self, parent)
self.layout = QVBoxLayout(self)
# Create a widgets and add them to the main layout
self.listWidget = QListWidget()
self.layout.addWidget(self.listWidget)
self.pushButtonOpen = QPushButton("Open second form", self)
self.layout.addWidget(self.pushButtonOpen)
self.pushButtonCancel = QPushButton("Close", self)
self.layout.addWidget(self.pushButtonCancel)
self.lineEdit_window = LineEdit_Window()
self.lineEdit_window.send.connect(self.on_receiver_slot)
self.set_buttons()
def create_second_form(self):
self.lineEdit_window.show()
def set_buttons(self):
self.pushButtonOpen.clicked.connect(self.create_second_form)
self.pushButtonCancel.clicked.connect(self.close)
def on_receiver_slot(self, message):
self.listWidget.addItem( message)
if __name__ == "__main__":
app = QApplication( sys.argv)
sender = ListWidget_Window()
sender.show()
sys.exit(app.exec_())
Code: Alles auswählen
from PyQt4 import QtCore
from PyQt4.QtGui import QVBoxLayout, QWidget, QLineEdit, QPushButton, QDialog
class LineEdit_Window(QDialog):
send = QtCore.pyqtSignal(str)
def __init__( self, parent=None):
QDialog.__init__( self, parent)
self.layout = QVBoxLayout(self)
# Create a widgets and add them to the main layout
self.lineEditExample = QLineEdit()
self.layout.addWidget(self.lineEditExample)
self.pushButtonUpdate = QPushButton("Update", self)
self.layout.addWidget(self.pushButtonUpdate)
self.pushButtonCancel = QPushButton("Close", self)
self.layout.addWidget(self.pushButtonCancel)
self.set_action_button()
def set_action_button(self):
self.pushButtonUpdate.clicked.connect(self.emit_sender_slot)
self.pushButtonCancel.clicked.connect(self.close)
def emit_sender_slot(self):
print 'Sender Slot triggered'
self.send.emit( self.lineEditExample.text())
Ich freue mich wie immer über Kritik.