From 4b18d4e35c1f3618e66050affea64bde02486d94 Mon Sep 17 00:00:00 2001 From: ommerthe69431 Date: Thu, 18 Jun 2020 22:43:28 +0200 Subject: [PATCH] =?UTF-8?q?feedbackfunktion=20=C3=BCberarbitet=20=20=20Der?= =?UTF-8?q?=20Text=20wird=20jetzt=20sofort=20aktuallisiert=20=20=20Standar?= =?UTF-8?q?tfarbein=20f=C3=BCr=20Text=20und=20Hintergrund=20eingebaut?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit unten_button_ohren_synchro() gibt jetzt feedback, wenn kein Ohr ausgewählt wurde Allgemein Feedbacktexte und -farben überarbeiet --- TinnitusAnalyse/SoundGenerator.py | 16 ++++++------- TinnitusAnalyse/TinnitusAnalyse_GUI.py | 32 ++++++++++++-------------- 2 files changed, 23 insertions(+), 25 deletions(-) diff --git a/TinnitusAnalyse/SoundGenerator.py b/TinnitusAnalyse/SoundGenerator.py index d0d6a9f..53c6b5e 100644 --- a/TinnitusAnalyse/SoundGenerator.py +++ b/TinnitusAnalyse/SoundGenerator.py @@ -4,6 +4,7 @@ import struct import sounddevice as sd # zum abspielen des audio-arrays import numpy as np import sys # für Fehlermeldungen +import time as tm """--------------------------------------------------------------------------------------------------------------------- In .wav-Dateien wird der Ton in absoluten Werte eingetragen. Die Standart-framerate ist 44100 @@ -101,7 +102,7 @@ class Sound: sound.callback() auf. Daher können die dort genutzten Variablen dynamisch geändert werden. """ def play(self): - if not self.mute: # NEVER play sound when patient mutes GUI + if not self.mute: # Nie abspielen, wenn die GUI auf stumm geschaltet ist self.sound_obj.start() def stop(self): @@ -117,19 +118,18 @@ class Sound: # Sinus ins Array schreiben: f(t) = A * sin(2 * pi * f * t) for x in range(frames): # links: - outdata[x][0] = self.tinnitus.linksLautstaerke * np.sin(2 * np.pi * self.tinnitus.linksFrequenz * - ((x + self.start_idx) / self.framerate)) + outdata[x][0] = self.tinnitus.linksLautstaerke * np.sin(2 * np.pi * self.tinnitus.linksFrequenz * + ((x + self.start_idx) / self.framerate)) # rechts: - outdata[x][1] = self.tinnitus.rechtsLautstaerke * np.sin(2 * np.pi * self.tinnitus.rechtsFrequenz * - ((x + self.start_idx) / self.framerate)) - + outdata[x][1] = self.tinnitus.rechtsLautstaerke * np.sin(2 * np.pi * self.tinnitus.rechtsFrequenz * + ((x + self.start_idx) / self.framerate)) # Rauschen addieren for x in range(frames): rand = (np.random.rand() - 0.5) # Zufallszahl zwischen -0.5 und 0.5 - #links: + # links: if self.tinnitus.linksRauschenLautstaerke: outdata[x][0] += rand * self.tinnitus.linksRauschenLautstaerke - #rechts: + # rechts: if self.tinnitus.rechtsRauschenLautstaerke: outdata[x][1] += rand * self.tinnitus.rechtsRauschenLautstaerke diff --git a/TinnitusAnalyse/TinnitusAnalyse_GUI.py b/TinnitusAnalyse/TinnitusAnalyse_GUI.py index f7be87d..da07729 100644 --- a/TinnitusAnalyse/TinnitusAnalyse_GUI.py +++ b/TinnitusAnalyse/TinnitusAnalyse_GUI.py @@ -78,13 +78,16 @@ def unten_button_ohren_synchro(): auswahl = untenComboOhrenSynchro.get() # holt die momentane Auswahl aus combobox print("Einstellungen von:" + auswahl + " das auf das jeweils andere Ohr setzen") + if auswahl == "": + feedback("Bitte wähle ein Ohr", "white", "red") + if auswahl == "Linkes Ohr": # linkes --> rechts rechtsScaleLautstärke.set(linksScaleLautstärke.get()) rechtsScaleFrequenz.set(linksScaleFrequenz.get()) rechtsScaleRauschenLautstärke.set(linksScaleRauschenLautstärke.get()) rechtsScaleRauschenMittelFrequenz.set(linksScaleRauschenMittelFrequenz.get()) rechtsScaleRauschenBandbreite.set(linksScaleRauschenBandbreite.get()) - feedback("Einstellungen vom linken Ohr auf beide Ohren übertragen", "white", "blue") + feedback("Einstellungen vom linken Ohr auf beide Ohren übertragen") if auswahl == "Rechtes Ohr": # rechts --> links linksScaleLautstärke.set(rechtsScaleLautstärke.get()) @@ -92,49 +95,43 @@ def unten_button_ohren_synchro(): linksScaleRauschenLautstärke.set(rechtsScaleRauschenLautstärke.get()) linksScaleRauschenMittelFrequenz.set(rechtsScaleRauschenMittelFrequenz.get()) linksScaleRauschenBandbreite.set(rechtsScaleRauschenBandbreite.get()) - feedback("Einstellungen vom rechten Ohr auf beide Ohren übertragen", "white", "blue") + feedback("Einstellungen vom rechten Ohr auf beide Ohren übertragen") def unten_button_speichern_press(): print("button speichern pressed") # Wenn man Speichern will bevor ein Name eingegeben wurde kann man nicht speichern - if (not untenEntryVorname.get()) or (not untenEntryNachname.get()) or \ - (untenEntryNachname == "Erst Namen..") or (untenEntryVorname == "..eintragen bitte"): - nachname.set("Erst Namen..") - vorname.set("..eintragen bitte") + if (not untenEntryVorname.get()) or (not untenEntryNachname.get()): print("fehlgeschlagener Speicherversuch - Keine Eingaben gemacht") - feedback("Fehlgeschlagener Speicherversuch! Mögliche Gründe: Erst Namen links eintragen.", "yellow", "red") - feedback("Falls es danach immer noch nicht geht, bitte Microsoft Excel schließen.", "yellow", "red") + feedback("Fehlgeschlagener Speicherversuch! Erst Namen links eintragen.", "white", "red") else: try: - feedback("Speichere Sound als .wav Datei . Kann bis zu 30 Sekunden dauern. Bitte warten...", "white", "blue") - # todo: warum auch immer, aber irgendwie wird feedback nach wav_speichern ausgeführt + feedback("Speichere Sound als '.wav'-Datei. Das kann bis zu 30 Sekunden dauern. Bitte warten...") tinnitus.vorname = untenEntryVorname.get() tinnitus.nachname = untenEntryNachname.get() tinnitus.kommentar = untenTextKommentar.get("1.0", END) tinnitus.speichern() sound.wav_speichern() - feedback("Daten erfolgreich gespeichert. Siehe: 'MeinTinnitus.wav' ", "white", "blue") + feedback("Daten erfolgreich gespeichert. Siehe: 'MeinTinnitus.wav' ") except: - feedback("Fehlgeschlagener Speicherversuch! Mögliche Gründe: Erst Namen links eintragen.", "yellow", "red") - feedback("Falls es danach immer noch nicht geht, bitte Microsoft Excel schließen.", "yellow", "red") + feedback("Fehlgeschlagener Speicherversuch! Bitte schließe Microsoft Excel.", "white", "red") def unten_button_play_press(): print("button play pressed") - feedback("Starte Audioausgabe...", "white", "green") + feedback("Starte Audioausgabe...", fontcolor="green") sound.mute = False # when this boolean is set to false no audio can ever play (it`s like a savety switch) sound.play() def unten_button_stop_press(): print("button stop press") - feedback("Stoppe Audioausgabe", "white", "red") # place text in feedback field, fontcololor, backgroundcolor + feedback("Stoppe Audioausgabe", fontcolor="red") # place text in feedback field, fontcololor, backgroundcolor sound.mute = True sound.stop() -def feedback(text, fontcolor, backgroundcolor): +def feedback(text, fontcolor = "black", backgroundcolor = "lightsteelblue"): """ This is a helper function. You can give it a string text and it will display it in the feedback frame (bottom right of the GUI) in the text widget. The parameter color is also a string and defines the font color. Same with background. Honestly this function is way too complicated, but Tkinter has no nicer/easier builtin way of doing the @@ -153,6 +150,7 @@ def feedback(text, fontcolor, backgroundcolor): untenFeedbackText.tag_config("Line"+str(feedback.lineCounter), foreground=fontcolor, background=backgroundcolor) untenFeedbackText.config(state=DISABLED) # set the text field back to readonly + root.update() #Damit der Text sofort ausgegeben wird, auch wenn das Programm erst noch was anderes macht """ Initialisierungen """ @@ -330,7 +328,7 @@ untererRechterFrame.grid(row=1, column=1, sticky=(N+S+E+W)) # ------------ PROGRAMM OUTPUT ------------ -untenFeedbackText = Text(untererRechterFrame, height=13, width=85, bg="lightblue") # write feedback to patient here +untenFeedbackText = Text(untererRechterFrame, height=13, width=85, bg="lightsteelblue") # write feedback to patient here #untenFeedbackText.config(state=DISABLED) # make the text widget readonly untenFeedbackText.place(relx=.5, rely=.5, anchor="center") # the only time I used .place instead of grid, because it # lets me place the widget in the middle of the frame