Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ws2122:asciia:abbruch.py:start [2022/03/16 14:30] MoscarTU angelegt |
ws2122:asciia:abbruch.py:start [2022/03/26 16:25] (aktuell) MoscarTU |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ==== Abbruch.py: ==== | + | ===== Abbruch.py: ===== |
+ | Diese Datei beinhaltet Funktionen, die das Programm korrekt beenden, falls STRG + C gedrückt wurde. Dabei war es uns wichtig, dass die temporär gespeicherten Bilder gelöscht werden, damit diese keinen Platz auf der Festplatte mehr verbrauchen. | ||
+ | <code python> | ||
+ | import shutil | ||
+ | import os | ||
+ | import signal | ||
+ | import colorama | ||
+ | import time | ||
+ | from colorama import Fore, Back, Style | ||
+ | import readchar # muss extra installiert werden mit: pip install readchar | ||
+ | import AsciiBildConverter as abc | ||
+ | |||
+ | </code> | ||
+ | Diese Bibliotheken werden für Abbruch.py extra importiert. | ||
+ | <code python> | ||
+ | |||
+ | thread_Pause = False | ||
+ | thread_kill = False | ||
+ | |||
+ | # Übergabe der eingegebenen Farben (für globale Variable) | ||
+ | def AbbruchFarbeZuweisung (farbe1, farbe2): | ||
+ | global abbruchHinFarbe | ||
+ | global abbruchVorFarbe | ||
+ | abbruchHinFarbe = farbe1 | ||
+ | abbruchVorFarbe = farbe2 | ||
+ | |||
+ | </code> | ||
+ | Die Funktion "AbbruchFarbeZuweisung" speichert nur die Farben (für Zeichen und Hintergrund) global ab, damit in der Funktion Abbruch auf die Farbeingabe von der Hauptdatei ASCII-Animation zugegriffen werden kann. | ||
+ | <code python> | ||
+ | |||
+ | def Abbruch(signum, frame): | ||
+ | global thread_Pause | ||
+ | global thread_kill | ||
+ | thread_Pause = True | ||
+ | time.sleep(0.2) | ||
+ | text = "\nSTRG-C wurde gedrückt. Willst du wirklich abbrechen? Drücke j/n (für Ja/Nein)." | ||
+ | print(Back.BLACK + Fore.RED + text, flush=True) | ||
+ | time.sleep(0.2) | ||
+ | antwort = readchar.readkey().lower() | ||
+ | if antwort == 'j': | ||
+ | thread_kill = True | ||
+ | abc.BildFreigeben() | ||
+ | time.sleep(0.1) | ||
+ | print("") | ||
+ | # Fehlerabfang, falls der Ordner noch nicht erstellt wurde | ||
+ | if os.path.exists('Bildercache'): | ||
+ | shutil.rmtree('Bildercache') # Löscht kompletten Ordner | ||
+ | |||
+ | print(Style.RESET_ALL) | ||
+ | exit(1) | ||
+ | else: | ||
+ | thread_Pause = False | ||
+ | # Fehlerabfang, falls am Anfang (vor Farbauswahl) STRG+C gedrückt wird | ||
+ | try: | ||
+ | print(getattr(Fore, abbruchHinFarbe) + getattr(Back, abbruchVorFarbe), end="\r") # für Hintergrundfarbe und Zeichenfarbe, print(Style.RESET_ALL) für Reset | ||
+ | except Exception: | ||
+ | print(Style.RESET_ALL) | ||
+ | |||
+ | print("", end="\r", flush=True) # Flush fixt ein Problem mit sleep | ||
+ | print(" " * len(text), end="", flush=True) # Löscht gedruckte Zeile | ||
+ | print(" ", end="\r", flush=True) | ||
+ | |||
+ | </code> | ||
+ | Die Methode "Abbruch" ist der Hauptbestandteil der Datei. Am Anfang werden die Variablen thread_Pause und thread_kill global und thread_Pause zu True. Dadurch wird der Thread pausiert, also es werden keine weiteren Bilder aus dem Video erstmal gespeichert (siehe ASCII-Animation-Datei). | ||
+ | Durch eine Nachricht wird der Benutzer aufgefordert "j" oder "n" zu drücken, die Farbe der Nachricht durfte nicht unbedingt so wie die Farbauswahl sein, da sie evtl. nicht sichtbar wäre. | ||
+ | Bei "j" wird der Thread gekillt und danach kommt eine wichtige sleep-Pause. Abschließend wird der Bildercache gelöscht. | ||
+ | Falls nicht abgebrochen werden soll, wird wieder die Farbe (für die Zeichen und den Hintergrund) wiederhergestellt. Dabei müssen die Variablen mit "getattr" von char/String in ein Attribut umgewandelt werden. | ||
+ | <code python> | ||
+ | |||
+ | def Abbruchsignal(): | ||
+ | signal.signal(signal.SIGINT, Abbruch) | ||
+ | </code> | ||
+ | |||
+ | Die Funktion fängt STRG+C ab. |