Skip to content
This repository has been archived by the owner on Jul 9, 2024. It is now read-only.

Commit

Permalink
Code ausgelagert
Browse files Browse the repository at this point in the history
  • Loading branch information
Floskinner committed May 27, 2021
1 parent d0b055b commit 300d2cd
Show file tree
Hide file tree
Showing 4 changed files with 96 additions and 86 deletions.
46 changes: 17 additions & 29 deletions gui.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import threading

from PyQt5 import QtWidgets, uic
from tools.gui import *
from tools.gui.qtzeiten import QtZeiten
from tools.gui.qtkontakt import QtKontakt
from tools.its import ImpfterminService
Expand Down Expand Up @@ -47,8 +48,8 @@ def __init__(self, pfad_fenster_layout: str = os.path.join(PATH, "tools/gui/main
# Funktionen den Buttons zuweisen
self.b_termin_suchen.clicked.connect(self.__termin_suchen)
self.b_code_generieren.clicked.connect(self.__code_generieren)
self.b_dateien_kontaktdaten.clicked.connect(lambda: self.__oeffne_file_dialog("kontaktdaten"))
self.b_dateien_zeitspanne.clicked.connect(lambda: self.__oeffne_file_dialog("zeitspanne"))
self.b_dateien_kontaktdaten.clicked.connect(self.__update_kontaktdaten_pfad)
self.b_dateien_zeitspanne.clicked.connect(self.__update_zeitspanne_pfad)
self.b_neue_kontaktdaten.clicked.connect(self.kontaktdaten_erstellen)
self.b_neue_zeitspanne.clicked.connect(self.zeitspanne_erstellen)

Expand All @@ -61,8 +62,8 @@ def __init__(self, pfad_fenster_layout: str = os.path.join(PATH, "tools/gui/main
self.i_zeitspanne_pfad.setText(self.pfad_zeitspanne)

# Events für Eingabefelder
self.i_kontaktdaten_pfad.textChanged.connect(self.__update_pfade)
self.i_zeitspanne_pfad.textChanged.connect(self.__update_pfade)
self.i_kontaktdaten_pfad.textChanged.connect(self.__update_kontaktdaten_pfad)
self.i_zeitspanne_pfad.textChanged.connect(self.__update_zeitspanne_pfad)

# Speichert alle termin_suchen Threads
self.such_threads = list()
Expand Down Expand Up @@ -184,32 +185,19 @@ def __get_zeitspanne(self) -> dict:

return zeitspanne

def __oeffne_file_dialog(self, datei: str):
"""
Öffnet einen "File-Picker", der entsprechende Werte für die kontaktdaten / zeitspanne einliest
Args:
datei (str): Startpfad vom File-Picker
"""

# Öffnet den "File-Picker" vom System um ein bereits existierende Datei auszuwählen
datei_data = QtWidgets.QFileDialog.getOpenFileName(self, datei, os.path.join(PATH, "data"), "JSON Files (*.json)")
dateipfad = datei_data[0] # (pfad, typ)

if dateipfad:
if datei == "kontaktdaten":
self.i_kontaktdaten_pfad.setText(dateipfad)
else:
self.i_zeitspanne_pfad.setText(dateipfad)

def __update_pfade(self):
"""
Wird ein Pfad in der GUI verändert, so werden die entsprechende Attribute angepasst
"""

self.pfad_kontaktdaten = self.i_kontaktdaten_pfad.text()
self.pfad_zeitspanne = self.i_zeitspanne_pfad.text()
def __update_kontaktdaten_pfad(self):
try:
pfad = oeffne_file_dialog_select(self, "Kontakdaten", self.pfad_kontaktdaten)
self.pfad_kontaktdaten = pfad
except FileNotFoundError:
pass

def __update_zeitspanne_pfad(self):
try:
pfad = oeffne_file_dialog_select(self, "Zeitspanne", self.pfad_zeitspanne)
self.pfad_zeitspanne = pfad
except FileNotFoundError:
pass

def main():
"""
Expand Down
68 changes: 68 additions & 0 deletions tools/gui/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import json
from PyQt5 import QtWidgets


def oeffne_file_dialog_save(parent_widged: QtWidgets.QWidget, titel: str, standard_speicherpfad: str, dateityp="JSON Files (*.json)") -> str:
"""
Öffnet ein File Dialog, der entsprechend einen Pfad zurück gibt, wohin gespeichert werden soll
Args:
parent_widged (PyQt5.QtWidgets.QWidget):
titel (str): Titel des Dialogs
standard_speicherpfad (str): Pfad welcher direkt geöffnet wird als Vorschlag
dateityp (str, optional): selectedFilter example: "Images (*.png *.xpm *.jpg)". Defaults to "JSON Files (*.json)".
Raises:
FileNotFoundError: Wird geworfen, wenn der Dateipfad leer ist
Returns:
str: Vollständiger Pfad
"""

datei_data = QtWidgets.QFileDialog.getSaveFileName(parent_widged, titel, standard_speicherpfad, dateityp)
dateipfad = datei_data[0] # (Pfad, Dateityp)

if not dateipfad:
raise FileNotFoundError

return dateipfad


def oeffne_file_dialog_select(parent_widged: QtWidgets.QWidget, titel: str, standard_oeffnungspfad: str, dateityp="JSON Files (*.json)") -> str:
"""
Öffnet einen File Dialog um eine existierende Datei auszuwählen
Args:
parent_widged (QtWidgets.QWidget): Parent QWidget an das der Dialog gehängt werden soll
titel (str): Titel des Dialogs
standard_oeffnungspfad (str): Pfad welcher direkt geöffnet wird als Vorschlag
dateityp (str, optional): selectedFilter example: "Images (*.png *.xpm *.jpg)". Defaults to "JSON Files (*.json)".
Raises:
FileNotFoundError: Wird geworfen, wenn der Dateipfad leer ist
Returns:
str: Vollständiger Pfad zur Datei
"""

# Öffnet den "File-Picker" vom System um ein bereits existierende Datei auszuwählen
datei_data = QtWidgets.QFileDialog.getOpenFileName(parent_widged, titel, standard_oeffnungspfad, "JSON Files (*.json)")
dateipfad = datei_data[0] # (pfad, typ)

if not dateipfad:
raise FileNotFoundError

return dateipfad


def speichern(speicherpfad: str, data: dict):
"""
Speichert die Daten mittels json.dump an den entsprechenden Ort
Args:
speicherpfad (str): speicherort
data (dict): Speicherdaten
"""

with open(speicherpfad, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
33 changes: 4 additions & 29 deletions tools/gui/qtkontakt.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from PyQt5 import QtWidgets, uic
from PyQt5.QtCore import QTime

from tools.gui import *

# Folgende Widgets stehen zur Verfügung:

Expand Down Expand Up @@ -53,6 +54,7 @@ def bestaetigt(self):

try:
self.speicher_einstellungen()
QtWidgets.QMessageBox.information(self, "Gepseichert", "Daten erfolgreich gespeichert")
self.close()
except (TypeError, IOError, FileNotFoundError) as error:
QtWidgets.QMessageBox.critical(self, "Fehler beim Speichern!", "Bitte erneut versuchen!")
Expand All @@ -64,18 +66,10 @@ def speicher_einstellungen(self):
Speicherpfad wird vom User abgefragt
"""

speicherpfad = self.__oeffne_file_dialog()

speicherpfad = oeffne_file_dialog_save(self, "Kontaktdaten", self.standard_speicherpfad)
data = self.__get_alle_werte()

with open(speicherpfad, 'w', encoding='utf-8') as f:
try:
json.dump(data, f, ensure_ascii=False, indent=4)
QtWidgets.QMessageBox.information(self, "Gepseichert", "Daten erfolgreich gespeichert")

except (TypeError, IOError, FileNotFoundError) as error:
QtWidgets.QMessageBox.critical(self, "Fehler!", "Daten konnten nicht gespeichert werden.")
raise error
speichern(speicherpfad, data)

def __button_clicked(self, button):
"""
Expand Down Expand Up @@ -135,25 +129,6 @@ def __get_alle_werte(self) -> dict:
}
return kontaktdaten

def __oeffne_file_dialog(self) -> str:
"""
Öffnet einen File Dialog, der den Speicherort festlegt
Raises:
FileNotFoundError: Wird geworfen, wenn kein Pfad angegeben wurde
Returns:
str: speicherpfad
"""

datei_data = QtWidgets.QFileDialog.getSaveFileName(self, "Kontaktdaten", self.standard_speicherpfad, "JSON Files (*.json)")
dateipfad = datei_data[0] # (Pfad, Dateityp)

if not dateipfad:
raise FileNotFoundError

return dateipfad

def __reset(self):
"""
Setzt alle Werte in der GUI zurück
Expand Down
35 changes: 7 additions & 28 deletions tools/gui/qtzeiten.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
from PyQt5 import QtWidgets, uic
from PyQt5.QtCore import QTime, QDate, QDateTime

from tools.gui import *

# Folgende Widgets stehen zur Verfügung:

### Checkboxes ###
Expand Down Expand Up @@ -70,9 +72,10 @@ def bestaetigt(self):

try:
self.speicher_einstellungen()
QtWidgets.QMessageBox.information(self, "Gepseichert", "Daten erfolgreich gespeichert")
self.close()
except ValueError as error:
QtWidgets.QMessageBox.critical(self, "Ungültige Eingabe!", "Start-Uhrzeit ist später als End-Uhrzeit!")
QtWidgets.QMessageBox.critical(self, "Ungültige Eingabe!", str(error))
except (TypeError, IOError, FileNotFoundError) as error:
QtWidgets.QMessageBox.critical(self, "Fehler beim Speichern!", "Bitte erneut versuchen!")

Expand All @@ -82,17 +85,10 @@ def speicher_einstellungen(self):
Speicherpfad wird vom User abgefragt
"""

speicherpfad = self.__oeffne_file_dialog()
speicherpfad = oeffne_file_dialog_save(self, "Zeitspanne", self.standard_speicherpfad)
data = self.__get_alle_werte()

with open(speicherpfad, 'w', encoding='utf-8') as f:
try:
json.dump(data, f, ensure_ascii=False, indent=4)
QtWidgets.QMessageBox.information(self, "Gepseichert", "Daten erfolgreich gespeichert")

except (TypeError, IOError, FileNotFoundError) as error:
QtWidgets.QMessageBox.critical(self, "Fehler!", "Daten konnten nicht gespeichert werden.")
raise error
speichern(speicherpfad, data)

def __button_clicked(self, button):
"""
Expand Down Expand Up @@ -171,7 +167,7 @@ def __get_uhrzeiten(self) -> dict:
end_uhrzeit: QTime = self.i_end_time_qtime.time()

if start_uhrzeit >= end_uhrzeit:
raise ValueError
raise ValueError("Start Uhrzeit is später als Enduhrzeit")

uhrzeiten = {
"startzeit": {
Expand Down Expand Up @@ -207,22 +203,6 @@ def __get_aktive_termine(self) -> list:
aktive_termine.append(2)
return aktive_termine

def __oeffne_file_dialog(self) -> str:
"""
Öffnet einen File Dialog, der den Speicherort festlegt
Returns:
str: Speicherpfad
"""

datei_data = QtWidgets.QFileDialog.getSaveFileName(self, "Zeitspanne", self.standard_speicherpfad, "JSON Files (*.json)")
dateipfad = datei_data[0] # (Pfad, Dateityp)

if not dateipfad:
raise FileNotFoundError

return dateipfad

def __reset(self, widgets: list = None):
"""
Setzt alle Werte in der GUI zurück
Expand All @@ -244,7 +224,6 @@ def __reset(self, widgets: list = None):
widget.setTime(QTime(23, 59))
elif isinstance(widget, QtWidgets.QFrame):
self.__reset(widget.children())



if __name__ == "__main__":
Expand Down

0 comments on commit 300d2cd

Please sign in to comment.