Ich habe mir mal erlaubt, Euch meinen Code zu posten, soweit ich ihn habe. Wenn Ihr mal drüber schauen und mir eventuell ein paar Hinweise geben könntet, wie ich was besser oder anders machen kann, würde ich mich sehr freuen.
Grundsätzlich beschäftige ich mich derzeit mit dem Problem, wie ich die Eingaben in die Eingabefelder abfangen und in einer Variablen abspeichern kann, die ich später, bei Betätigung des Bestätigungs-Buttons in die DB eintragen kann. Ich habe bislang nichts gefunden, dass mir die Umsetzung dieses Sachverhaltes verständlich darlegt. Irgendeine Idee?
Code: Alles auswählen
#!/usr/bin/env python
#-*- coding:utf-8 -*-
"""
Projekt: MVC Test
Klassen: Model, View, Control
Version: 1.0
Datum: 22.02.2017
Author: the_real_noob
"""
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLineEdit, QLabel, \
QPushButton
from PyQt5.Qt import QComboBox
import psycopg2
#==============================================================================#
# Model #
#==============================================================================#
class Model(object):
def __init__(self):
self.conn = None
self.cache = []
def db_connect(self, db_name):
# Connect Database
try:
print('Try to connect')
self.conn = psycopg2.connect(db_name)
print('Database connected')
except psycopg2.OperationalError as e:
print ("Unable to connect!")
print (e.pgerror)
def loadCities(self):
if len(self.cache) == 0:
cur = self.conn.cursor()
cur.execute('SELECT * FROM city')
a = cur.fetchall()
#self.cache.append('')
for b in a:
# Nur Stadt anhängen, nicht id
self.cache.append(b[1])
cur.close()
def insertData(self, i):
print('Insert Data', i)
def getCache(self):
return self.cache
def db_close(self):
self.conn.close()
#==============================================================================#
# View #
#==============================================================================#
class View(QMainWindow):
'View-Klasse - beinhaltet die Methoden: initMenubar, initTextLines,'
'initTextlabels, initButton und userInterface zum Zeichnen.'
def __init__(self, eventManager):
super().__init__()
self.tmp = None
self.eventManager = eventManager
def initMenubar(self):
menubar = self.menuBar()
file = menubar.addMenu('File')
#file.addAction(self.newAction)
#file.addAction(self.exitAction)
def initTextLines(self):
surnameLine = QLineEdit(self)
nameLine = QLineEdit(self)
streetLine = QLineEdit(self)
numberLine = QLineEdit(self)
postalCodeLine = QLineEdit(self)
surnameLine.setGeometry(110, 50, 150, 20)
nameLine.setGeometry(110, 80, 150, 20)
streetLine.setGeometry(110, 110, 150, 20)
numberLine.setGeometry(110, 140, 150, 20)
postalCodeLine.setGeometry(110, 170, 150, 20)
surnameLine.textChanged.connect(self.eventManager[3])
#surnameLine.editingFinished.connect(self.eventManager[3])
def initComboBox(self, cityCache):
# City choice
self.tmp = cityCache
self.cityBoxContent = ''
cityBox = QComboBox(self) # Stadt
cityBox.setGeometry(110, 200, 150, 20)
#cityBox.setEditable(True)
#cityBox.clearEditText()
#cityBox.setLineEdit() #.setMaxLength(45)
#cityBox.setCompleter()
#cityBox.addItem('')
cityBox.addItems(cityCache)
cityBox.currentIndexChanged.connect(self.eventManager[2])
def initTextLabels(self):
textLine1Label = QLabel(self)
textLine1Label.setGeometry(40, 50, 70, 20)
textLine1Label.setText("Vorname: ")
#textLine1.setStyleSheet('QLineEdit {background-color: #daf982}')
textLine2Label = QLabel(self)
textLine2Label.setGeometry(40, 80, 70, 20)
textLine2Label.setText("Nachname: ")
textLine3Label = QLabel(self)
textLine3Label.setGeometry(40, 110, 70, 20)
textLine3Label.setText("Straße: ")
textLine4Label = QLabel(self)
textLine4Label.setGeometry(40, 140, 70, 20)
textLine4Label.setText("Hausnummer: ")
textLine5Label = QLabel(self)
textLine5Label.setGeometry(40, 170, 70, 20)
textLine5Label.setText("PLZ: ")
textLine6Label = QLabel(self)
textLine6Label.setGeometry(40, 200, 70, 20)
textLine6Label.setText("Stadt: ")
def initButtons(self):
confirm = QPushButton(self)
#btnConfirmEvent = self.eventManager[1]
confirm.setGeometry(25,250,100,30)
confirm.setText('Bestätigen')
#btnConfirm.clicked.connect(btnConfirmEvent('3'))
confirm.clicked.connect(self.eventManager[1])
logOff = QPushButton(self)
logOff.setGeometry(175,250,100,30)
logOff.setText('Abmelden')
logOff.clicked.connect(self.eventManager[0])
def userInterface(self, cityCache):
self.setStyleSheet('QMainWindow {background-color: #caff33}')
self.setGeometry(250 , 300 , 300 , 500)
self.setWindowTitle('Sportimer')
#self.initActions()
self.initMenubar()
self.initTextLines()
self.initComboBox(cityCache)
self.initTextLabels()
self.initButtons()
self.show()
#==============================================================================#
# Controller #
#==============================================================================#
class Control(object):
def __init__(self):
eventManagement = [self.logOff, self.confirm, self.cityBox, \
self.textlineChanged]
self.view = View(eventManagement)
self.model = Model()
self.cache = []
self.textLine1 = ''
self.textLine2 = ''
self.textLine3 = ''
self.textLine4 = ''
self.textLine5 = ''
def initModel(self):
self.model.db_connect('dbname=sportimer user=postgres \
host=localhost password=50/5x5+5-55')
self.model.loadCities()
self.model.db_close()
self.cache = self.model.getCache()
def initUI(self):
self.view.userInterface(self.cache)
def logOff(self):
print('Funzt')
def confirm(self):
print('XXXXX')
def textlineChanged(self, text):
j = ''
for i in text:
j += i
print(j)
def cityBox(self, i):
#print(self.view.cityBox.currentText(i))
print(self.cache[i])
if __name__ == '__main__':
app = QApplication(sys.argv)
start = Control()
start.initModel()
start.initUI()
sys.exit(app.exec_())