Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ws2122:asciia:abbruch.py:start [2022/03/16 14:50] MoscarTU |
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 Bilder, welche temporär gespeichert werden zu löschen, damit diese nicht die Festplatte vollmüllen. | + | 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> | <code python> | ||
import shutil | import shutil | ||
Zeile 7: | Zeile 7: | ||
import colorama | import colorama | ||
import time | import time | ||
- | from colorama import Fore, Back, Style # Diese und folgende Zeile für Farbänderung | + | from colorama import Fore, Back, Style |
import readchar # muss extra installiert werden mit: pip install readchar | 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_Pause = False | ||
thread_kill = False | thread_kill = False | ||
- | def AbbruchFarbeZuweisung (farbe1, farbe2): # Übergabe der eingegebenen Farben (für globale Variable) | + | # Übergabe der eingegebenen Farben (für globale Variable) |
+ | def AbbruchFarbeZuweisung (farbe1, farbe2): | ||
global abbruchHinFarbe | global abbruchHinFarbe | ||
global abbruchVorFarbe | global abbruchVorFarbe | ||
abbruchHinFarbe = farbe1 | abbruchHinFarbe = farbe1 | ||
abbruchVorFarbe = farbe2 | 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): | def Abbruch(signum, frame): | ||
Zeile 25: | Zeile 34: | ||
thread_Pause = True | thread_Pause = True | ||
time.sleep(0.2) | time.sleep(0.2) | ||
- | # _ = system("cls") # nur Bildschirm clearen, wenn der Bug zu häufig auftritt | + | text = "\nSTRG-C wurde gedrückt. Willst du wirklich abbrechen? Drücke j/n (für Ja/Nein)." |
- | text = "\nSTRG-C wurde gedrückt. Willst du wirklich abbrechen? Drücke j/n (für Ja/Nein)." #Gib j/n (für Ja/Nein) ein. -> wenn ohne readchar | + | |
print(Back.BLACK + Fore.RED + text, flush=True) | print(Back.BLACK + Fore.RED + text, flush=True) | ||
+ | time.sleep(0.2) | ||
antwort = readchar.readkey().lower() | antwort = readchar.readkey().lower() | ||
if antwort == 'j': | if antwort == 'j': | ||
- | thread_kill = True # extra Thread sollte vor Programmende gekillt werden, da sonst die Anaconda verbuggt ist (manchmal) | + | thread_kill = True |
+ | abc.BildFreigeben() | ||
time.sleep(0.1) | time.sleep(0.1) | ||
print("") | print("") | ||
- | if os.path.exists('Bildercache'): # Fehlerabfang, falls der Ordner noch nicht erstellt wurde | + | # Fehlerabfang, falls der Ordner noch nicht erstellt wurde |
- | shutil.rmtree('Bildercache') # Löscht kompletten Ordner (ganz am Ende soll das hin) | + | if os.path.exists('Bildercache'): |
+ | shutil.rmtree('Bildercache') # Löscht kompletten Ordner | ||
print(Style.RESET_ALL) | print(Style.RESET_ALL) | ||
exit(1) | exit(1) | ||
else: | else: | ||
thread_Pause = False | thread_Pause = False | ||
- | try: # Fehlerabfang, falls am Anfang STRG+C gedrückt wird | + | # 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 | print(getattr(Fore, abbruchHinFarbe) + getattr(Back, abbruchVorFarbe), end="\r") # für Hintergrundfarbe und Zeichenfarbe, print(Style.RESET_ALL) für Reset | ||
except Exception: | except Exception: | ||
print(Style.RESET_ALL) | print(Style.RESET_ALL) | ||
- | print("", end="\r", flush=True) # Flush fixt ein Problem mit sleep (evtl. kann hier auch weg oder noch an andere Stellen des Programms hinzufügen) | + | |
+ | print("", end="\r", flush=True) # Flush fixt ein Problem mit sleep | ||
print(" " * len(text), end="", flush=True) # Löscht gedruckte Zeile | print(" " * len(text), end="", flush=True) # Löscht gedruckte Zeile | ||
print(" ", end="\r", flush=True) | 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(): | def Abbruchsignal(): | ||
signal.signal(signal.SIGINT, Abbruch) | signal.signal(signal.SIGINT, Abbruch) | ||
</code> | </code> | ||
+ | |||
+ | Die Funktion fängt STRG+C ab. |