kann mir jemand vielleicht bei dem Umgang mit QApplication helfen?
Ich schreib ein kleines Programm zur Arbeitszeitenerfassung.
Das Hauptprogramm
Code: Alles auswählen
import sqlite3
import sys
from sqlite3.dbapi2 import Cursor
from PyQt5 import QtGui
from MainWindow import MainWindow
from PyQt5 import QtCore, QtWidgets, uic
def main():
app = QtWidgets.QApplication(sys.argv)
# app.exec_
hauptfenster = MainWindow()
hauptfenster.show()
sys.exit(app.exec())
if __name__ == "__main__":
main()
Code: Alles auswählen
from Workingday import Workingday
from Project import Project
import sys
import os
import sqlite3
from PyQt5 import QtCore, QtGui, QtWidgets, uic
class MainWindow(QtWidgets.QMainWindow):
bufferrecord1 = ' '
bufferrecord2 = ' '
bufferdate = ' '
def __init__(self):
QtWidgets.QMainWindow.__init__(self) # Alternative: super()
self.ui = uic.loadUi("designArbeitszeitenerfassung.ui", self)
self.ui.pushButtonLadeDaten.clicked.connect(self.pushButtonLadeDatenclick)
self.ui.pushButtonZeitenbuchen.clicked.connect(self.pushButtonZeitenbuchenclick)
self.ui.pushButtonZeitenbuchen.setShortcut("Ctrl+b")
self.ui.pushButtonLadeDaten.setShortcut("Ctrl+l")
self.ui.pushButtonLoeschen.setShortcut("Ctrl+d")
self.ui.pushButtonLoeschen.clicked.connect(self.pushButtonLoeschenclick)
self.ui.action_Projekte_anlegen.triggered.connect(self.action_Projekte_anlegenclick)
# self.ui.action_Projekte_anlegen.triggered.connect.setShortcut("Ctrl+m")
self.ui.dateEdit.setDateTime(QtCore.QDateTime.currentDateTime())
def getWindowProjectsCustomizing(self):
self.ui = uic.loadUi("designProjectsCustomizing.ui", self)
self.ui.pushButtonMenu.clicked.connect(self.pushButtonMenuclick)
self.ui.pushButtonAdd.clicked.connect(self.pushButtonAddcklick)
#self.ui.pushButtonDelete.clicked.connect(self.pushButtonDeleteclick)
# datarecord = Workingday.load_data_projects(self)
print("Go")
def pushButtonAddcklick(self):
msgBox = QtWidgets.QMessageBox()
project_name = self.textEditProjectName.toPlainText()
notes_project_txt = self.textEditProjectNotes.toPlainText()
if not self.textEditProjectNotes.toPlainText():
msgBox.setText("Der Name des Projektes darf nicht leer sein.")
msgBox.setStandardButtons(QtWidgets.QMessageBox.Ok)
msgBox.setDefaultButton(QtWidgets.QMessageBox.Ok)
ret = msgBox.exec_()
elif not self.textEditProjectNotes.toPlainText():
msgBox.setText("Es muss eine Beschreibung zum Projekt eingetragen sein.")
msgBox.setStandardButtons(QtWidgets.QMessageBox.Ok)
msgBox.setDefaultButton(QtWidgets.QMessageBox.Ok)
ret = msgBox.exec_()
else:
verbindung = sqlite3.connect("arbeitszeiten.db")
cursor = verbindung.cursor()
# self.cursor.execute()
try:
sqlite_insert_with_param = """INSERT OR REPLACE INTO projekte (name, beschreibung)
VALUES(?, ?)"""
cursor.execute(sqlite_insert_with_param, [project_name, notes_project_txt])
except sqlite3.IntegrityError:
print("Zu dem Datum gibt es schon einen Eintrag")
a = True
while a == True:
x = input('Soll der Datensatz überschrieben werden? (j/n)')
if x == 'j':
a = False
#
elif x == 'n': a = False
verbindung.commit()
# self.pushButtonLadeDatenclick()
def pushButtonZeitenbuchenclick(self):
msgBox = QtWidgets.QMessageBox()
temp_var = self.dateEdit.date()
date = temp_var.toPyDate()
date = str(date)
self.date = date
project_txt = self.textEditProject.toPlainText()
notes_txt = self.textEditNotes.toPlainText()
hours = self.doubleSpinBoxHours.value()
if not self.textEditProject.toPlainText():
# msgBox.setIcon()
msgBox.setText("Das Feld 'Projekt' darf nicht leer sein.")
msgBox.setStandardButtons(QtWidgets.QMessageBox.Ok)
msgBox.setDefaultButton(QtWidgets.QMessageBox.Ok)
ret = msgBox.exec_()
elif self.doubleSpinBoxHours.value() <= 0:
msgBox.setText("Die Angabe der Studenanzahl ist ungültig.")
msgBox.setStandardButtons(QtWidgets.QMessageBox.Ok)
msgBox.setDefaultButton(QtWidgets.QMessageBox.Ok)
ret = msgBox.exec_()
else:
tag = Workingday(date, project_txt, notes_txt, hours)
tag.add_Arbeitszeiten()
tag.close_db_connection()
self.pushButtonLadeDatenclick()
def pushButtonLadeDatenclick(self):
temp_var = self.dateEdit.date()
date = temp_var.toPyDate()
date = str(date)
self.date = date
datarecord1, datarecord2 = Workingday.load_data(self)
print(datarecord1)
print(datarecord2)
self.set_buffer(datarecord1, datarecord2, date)
self.get_buffer()
def pushButtonLoeschenclick(self):
msgBox = QtWidgets.QMessageBox()
anzahlZeilen = self.tableWidgetProjects.rowCount()
i = 0
# print("Zeilen: " + str(anzahlZeilen))
# while i < anzahlZeilen:
# print('i: ' + str(i))
i_projektname = self.tableWidgetProjects.item(self.ui.tableWidgetProjects.currentRow(),0).text()
i_date = Workingday.get_Datum(self)
msgBox.setText("Soll die ausgewählte Zeile gelöscht werden?")
msgBox.setStandardButtons(QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel)
ret = msgBox.exec_()
if ret == QtWidgets.QMessageBox.Ok:
Workingday.delete_data(self,i_date,i_projektname)
self.pushButtonLadeDatenclick()
i+=1
def pushButtonMenuclick(self):
self.ui = uic.loadUi("designArbeitszeitenerfassung.ui", self)
self.ui.pushButtonLadeDaten.clicked.connect(self.pushButtonLadeDatenclick)
self.ui.pushButtonZeitenbuchen.clicked.connect(self.pushButtonZeitenbuchenclick)
self.ui.pushButtonZeitenbuchen.setShortcut("Ctrl+b")
self.ui.pushButtonLadeDaten.setShortcut("Ctrl+l")
self.ui.pushButtonLoeschen.setShortcut("Ctrl+d")
self.ui.pushButtonLoeschen.clicked.connect(self.pushButtonLoeschenclick)
self.ui.action_Projekte_anlegen.triggered.connect(self.action_Projekte_anlegenclick)
# self.ui.action_Projekte_anlegen.triggered.connect.setShortcut("Ctrl+m")
self.ui.dateEdit.setDateTime(QtCore.QDateTime.currentDateTime())
self.get_buffer()
def action_Projekte_anlegenclick(self):
self.getWindowProjectsCustomizing()
def _removeRow(self):
if self.rowCount() > 0:
currentRow = self.currentRow()
self._removeRow(currentRow)
def set_buffer(self, record1, record2, date):
self.bufferrecord1 = record1
self.bufferrecord2 = record2
self.bufferdate = date
def get_buffer(self):
datarecord1 = self.bufferrecord1
datarecord2 = self.bufferrecord2
print(self.bufferdate)
strdat = str(self.bufferdate)
new_date = QtCore.QDate.fromString(strdat,"yyyy-MM-dd")
print("New:" + str(new_date))
print(type(new_date))
self.ui.dateEdit.setDate(new_date)
self.dateEdit.setDate(new_date)
self.dateEdit.setDate(QtCore.QDate.fromString(self.bufferdate, "dd-MM-yyyy"))
self.ui.dateEdit.setDate(QtCore.QDate.fromString(self.bufferdate, "dd-MM-yyyy"))
self.tableWidgetWorkingDay.setRowCount(1)
self.tableWidgetProjects.setRowCount(len(datarecord1))
self.tableWidgetWorkingDay.setEditTriggers(QtWidgets.QTableWidget.NoEditTriggers)
self.tableWidgetProjects.setEditTriggers(QtWidgets.QTableWidget.NoEditTriggers)
tablerow = 0
if not datarecord2:
self.tableWidgetWorkingDay.setRowCount(0)
self.pushButtonLoeschen.setEnabled(False)
else:
if datarecord2 !=' ':
for row in datarecord2:
it2 = str(row[1])
self.tableWidgetWorkingDay.setItem(tablerow, 0, QtWidgets.QTableWidgetItem(row[0]))
self.tableWidgetWorkingDay.setItem(tablerow, 1, QtWidgets.QTableWidgetItem(it2))
tablerow+=1
self.pushButtonLoeschen.setEnabled(True)
tablerow = 0
if not datarecord1:
self.tableWidgetProjects.setRowCount(0)
else:
if datarecord1 != ' ':
for row in datarecord1:
it3 = str(row[3])
self.tableWidgetProjects.setItem(tablerow, 0, QtWidgets.QTableWidgetItem(row[1]))
self.tableWidgetProjects.setItem(tablerow, 1, QtWidgets.QTableWidgetItem(row[2]))
self.tableWidgetProjects.setItem(tablerow, 2, QtWidgets.QTableWidgetItem(it3))
tablerow+=1
def getWindowProjectsCustomizing(self):
self.ui = uic.loadUi("designProjectsCustomizing.ui", self)
self.ui.pushButtonMenu.clicked.connect(self.pushButtonMenuclick)
self.ui.pushButtonAdd.clicked.connect(self.pushButtonAddcklick)
#self.ui.pushButtonDelete.clicked.connect(self.pushButtonDeleteclick)
# datarecord = Workingday.load_data_projects(self)
In Workingday gibt es die Methode load_data, die dann einen INSERT machen soll, aber beim cursor.execute kriege ich dann die Meldung: "QCoreApplication::exec: The event loop is already running".
def add_data_projects(self, i_project_name, i_notes_project_txt):
project_name = i_project_name
project_notes = i_notes_project_txt
verbindung = sqlite3.connect("arbeitszeiten.db")
cursor = verbindung.cursor()
# self.cursor.execute()
try:
sqlite_insert_with_param = """INSERT OR REPLACE INTO projekte (name, beschreibung)
VALUES(?, ?)"""
cursor.execute(sqlite_insert_with_param, project_name, project_notes)
except sqlite3.IntegrityError:
Hier wäre meine Frage, wo dieser dann noch einmal erzeugt wird.
Ich würde mich sehr über jegliche Hilfe freuen

Vielen Dank schon einmal!