QApplication zweites Fenster SQLITE
Verfasst: Dienstag 3. August 2021, 18:09
Hallo,
kann mir jemand vielleicht bei dem Umgang mit QApplication helfen?
Ich schreib ein kleines Programm zur Arbeitszeitenerfassung.
Das Hauptprogramm
Das Hauptfenster wird erzeugt, in dem die Arbeitszeiten auf der DB bearbeitet werden:
Die Methode ruft ein anderes UI auf, sodass das Hauptfenster dieses wird und hier soll auch eine Bearbeitung in einer Tabelle der gleichen Datenbank erfolgen.
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!
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!