|
|
@@ -2,7 +2,7 @@ from tkinter.ttk import Frame, Label, Button, LabelFrame, Combobox, Style, Check |
|
|
|
from tkinter import * |
|
|
|
from SoundGenerator import * |
|
|
|
import csv |
|
|
|
|
|
|
|
import time |
|
|
|
|
|
|
|
"""--------------------------FUNKTIONEN DIE DURCH GUI KLICKS AUSGEFÜHRT WERDEN---------------------------------------""" |
|
|
|
"""-------Funktionen links-------------""" |
|
|
@@ -75,7 +75,7 @@ def rechts_scale_rauschen_bandbreite_change(self): |
|
|
|
|
|
|
|
|
|
|
|
def unten_button_ohren_synchro(): |
|
|
|
auswahl = untenComboOhrenSynchro.get() # holt die momentane Auswahl aus combobox |
|
|
|
auswahl = untenComboOhrenSynchro.get() # holt die momentane Auswahl aus combobox |
|
|
|
print("Einstellungen von:" + auswahl + " das auf das jeweils andere Ohr setzen") |
|
|
|
|
|
|
|
if auswahl == "Linkes Ohr": # linkes --> rechts |
|
|
@@ -84,6 +84,7 @@ def unten_button_ohren_synchro(): |
|
|
|
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") |
|
|
|
|
|
|
|
if auswahl == "Rechtes Ohr": # rechts --> links |
|
|
|
linksScaleLautstärke.set(rechtsScaleLautstärke.get()) |
|
|
@@ -91,6 +92,7 @@ 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") |
|
|
|
|
|
|
|
|
|
|
|
def unten_button_speichern_press(): |
|
|
@@ -101,40 +103,68 @@ def unten_button_speichern_press(): |
|
|
|
nachname.set("Erst Namen..") |
|
|
|
vorname.set("..eintragen bitte") |
|
|
|
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") |
|
|
|
else: |
|
|
|
tinnitus.vorname = untenEntryVorname.get() |
|
|
|
tinnitus.nachname = untenEntryNachname.get() |
|
|
|
tinnitus.kommentar = untenTextKommentar.get("1.0", END) |
|
|
|
print("Speichere Patientendaten, siehe TinnitusDaten.csv") |
|
|
|
tinnitus.speichern() |
|
|
|
sound.wav_speichern() |
|
|
|
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 |
|
|
|
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") |
|
|
|
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") |
|
|
|
|
|
|
|
|
|
|
|
def unten_button_play_press(): |
|
|
|
print("button play pressed -> mute=false") |
|
|
|
sound.mute = False |
|
|
|
print("button play pressed") |
|
|
|
feedback("Starte Audioausgabe...", "white", "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 -> mute=true") |
|
|
|
print("button stop press") |
|
|
|
feedback("Stoppe Audioausgabe", "white", "red") # place text in feedback field, fontcololor, backgroundcolor |
|
|
|
sound.mute = True |
|
|
|
sound.stop() |
|
|
|
|
|
|
|
|
|
|
|
"""""" |
|
|
|
tinnitus = Tinnitus() |
|
|
|
sound = Sound(tinnitus) |
|
|
|
print("test") |
|
|
|
def feedback(text, fontcolor, backgroundcolor): |
|
|
|
""" 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 |
|
|
|
coloring nicely """ |
|
|
|
feedback.lineCounter += 1 # in order to color the texts nicely we need to count the lines of text we add |
|
|
|
untenFeedbackText.config(state=NORMAL) # activate text field (otherwise it is readonly) |
|
|
|
|
|
|
|
if feedback.lineCounter == 12: # if we reached the end of the text box |
|
|
|
untenFeedbackText.delete("1.0", END) # just delete everything |
|
|
|
feedback.lineCounter = 1 # and start at line 1 again |
|
|
|
|
|
|
|
untenFeedbackText.insert(INSERT, text + "\n") # insert the text |
|
|
|
# these 2 lines just color the text nicely, but Tkinter forces your to first "tag_add" mark it and specify the |
|
|
|
# line number and char number you want to mark. And then "tag_config" change the color of this marked region |
|
|
|
untenFeedbackText.tag_add("Line"+str(feedback.lineCounter), str(feedback.lineCounter)+".0", str(float(len(text)))) |
|
|
|
untenFeedbackText.tag_config("Line"+str(feedback.lineCounter), foreground=fontcolor, background=backgroundcolor) |
|
|
|
|
|
|
|
untenFeedbackText.config(state=DISABLED) # set the text field back to readonly |
|
|
|
|
|
|
|
|
|
|
|
""" Initialisierungen """ |
|
|
|
tinnitus = Tinnitus() # siehe SoundGenerator.py |
|
|
|
sound = Sound(tinnitus) # siehe SoundGenerator.py |
|
|
|
feedback.lineCounter = 0 # Funktionsvariable der Feedback funktion. Ein Funktionsaufruf Counter |
|
|
|
|
|
|
|
"""------------------------------------------ AUFBAU DES ROOT WINDOWS -----------------------------------------------""" |
|
|
|
root = Tk() # build the main window |
|
|
|
root.title("Tinnitus Analyse") |
|
|
|
#root.iconbitmap('headphones.ico') #todo: fix icon |
|
|
|
root.minsize(width=800, height=500) |
|
|
|
root.resizable(True, True) |
|
|
|
root.columnconfigure(0, weight=1) |
|
|
|
root.columnconfigure(1, weight=1) |
|
|
|
root.rowconfigure(0, weight=1) |
|
|
|
root.minsize(width=800, height=500) # set windowsize (width an height in pixels) |
|
|
|
root.resizable(False, False) # window not resizable (x and y) |
|
|
|
|
|
|
|
|
|
|
|
"""------------------------------------------LINKER FRAME------------------------------------------------------------""" |
|
|
@@ -150,14 +180,14 @@ linksRauschenFrequenzband = DoubleVar() |
|
|
|
# ------------------ LAUTSTÄRKE ------------------ |
|
|
|
linksLabelLautstärke = Label(linkerFrame, text="Lautstärke [%]:") |
|
|
|
linksLabelLautstärke.grid(column=0, row=0, sticky=W) |
|
|
|
linksScaleLautstärke = Scale(linkerFrame, from_=0, to=100, orient=HORIZONTAL, length=400, |
|
|
|
linksScaleLautstärke = Scale(linkerFrame, from_=0, to=100, orient=HORIZONTAL, length=600, |
|
|
|
command=links_scale_lautstärke_change) |
|
|
|
linksScaleLautstärke.grid(column=1, row=0, sticky=N+S+W+E) |
|
|
|
|
|
|
|
# -------- FREQUENZ ------------------------ |
|
|
|
linksLabelFrequenz = Label(linkerFrame, text="Frequenz [kHz]") |
|
|
|
linksLabelFrequenz.grid(column=0, row=1, sticky=W) # sticky = w(est) makes the text left aligned |
|
|
|
linksScaleFrequenz = Scale(linkerFrame, from_=0, to=20, orient=HORIZONTAL, length=400, resolution=-1.0, |
|
|
|
linksScaleFrequenz = Scale(linkerFrame, from_=0, to=20, orient=HORIZONTAL, length=600, resolution=-1.0, |
|
|
|
command=links_scale_frequenz_change) |
|
|
|
linksScaleFrequenz.grid(column=1, row=1, sticky=(W+E)) |
|
|
|
|
|
|
@@ -168,26 +198,26 @@ linksSeparator.grid(column=0, row=2, sticky=(W + E), columnspan=3) |
|
|
|
# ----------- RAUSCHEN -------------------- |
|
|
|
linksLabelRauschenLautstärke = Label(linkerFrame, text="Rauschen Lautstärke %", anchor="w") |
|
|
|
linksLabelRauschenLautstärke.grid(column=0, row=3, sticky=W) |
|
|
|
linksScaleRauschenLautstärke = Scale(linkerFrame, from_=0, to=100, orient=HORIZONTAL, length=400, |
|
|
|
linksScaleRauschenLautstärke = Scale(linkerFrame, from_=0, to=100, orient=HORIZONTAL, length=600, |
|
|
|
command=links_scale_rauschen_lautstärke_change) |
|
|
|
linksScaleRauschenLautstärke.grid(column=1, row=3, sticky=(W+E)) |
|
|
|
|
|
|
|
linksLabelRauschenMittelFrequenz = Label(linkerFrame, text="Rauschen Mittelfrequenz [kHz]", anchor="w") |
|
|
|
linksLabelRauschenMittelFrequenz .grid(column=0, row=4, sticky=(W+E)) |
|
|
|
linksScaleRauschenMittelFrequenz = Scale(linkerFrame, from_=0, to=20, orient=HORIZONTAL, length=400, resolution=-1.0, |
|
|
|
linksScaleRauschenMittelFrequenz = Scale(linkerFrame, from_=0, to=20, orient=HORIZONTAL, length=600, resolution=-1.0, |
|
|
|
command=links_scale_rauschen_mittelfrequenz_change) |
|
|
|
linksScaleRauschenMittelFrequenz.grid(column=1, row=4, sticky=(W+E)) |
|
|
|
|
|
|
|
linksLabelRauschenBandbreite= Label(linkerFrame, text="Rauschen Bandbreite [kHz]", anchor="w") |
|
|
|
linksLabelRauschenBandbreite.grid(column=0, row=5, sticky=W) |
|
|
|
linksScaleRauschenBandbreite = Scale(linkerFrame, from_=0, to=20, orient=HORIZONTAL, length=400, resolution=-1.0, |
|
|
|
linksScaleRauschenBandbreite = Scale(linkerFrame, from_=0, to=20, orient=HORIZONTAL, length=600, resolution=-1.0, |
|
|
|
command=links_scale_rauschen_bandbreite_change) |
|
|
|
linksScaleRauschenBandbreite.grid(column=1, row=5, sticky=(W+E)) |
|
|
|
|
|
|
|
|
|
|
|
"""----------------------------------------------RECHTER FRAME-------------------------------------------------------""" |
|
|
|
rechterFrame = LabelFrame(root, text="Rechtes Ohr", font="bold") |
|
|
|
rechterFrame.grid(column=2, row=0, sticky=(N+E+W+S)) |
|
|
|
rechterFrame.grid(column=1, row=0, sticky=(N+E+W+S)) |
|
|
|
|
|
|
|
|
|
|
|
# Variablen Rechts |
|
|
@@ -199,14 +229,14 @@ rechtsLautstärke = DoubleVar() |
|
|
|
# ------------------ LAUTSTÄRKE ------------------ |
|
|
|
rechtsLabelLautstärke = Label(rechterFrame, text="Lautstärke [%]:") |
|
|
|
rechtsLabelLautstärke.grid(column=0, row=0, sticky=W) |
|
|
|
rechtsScaleLautstärke = Scale(rechterFrame, from_=0, to=100, orient=HORIZONTAL, length=400, |
|
|
|
rechtsScaleLautstärke = Scale(rechterFrame, from_=0, to=100, orient=HORIZONTAL, length=600, |
|
|
|
command=rechts_scale_lautstärke_change) |
|
|
|
rechtsScaleLautstärke.grid(column=1, row=0, columnspan=10, sticky=W) |
|
|
|
|
|
|
|
# -------- FREQUENZ ------------------------ |
|
|
|
rechtsLabelFrequenz = Label(rechterFrame, text="Frequenz [kHz]") |
|
|
|
rechtsLabelFrequenz.grid(column=0, row=1, sticky=W) # sticky = w(est) makes the text left aligned |
|
|
|
rechtsScaleFrequenz = Scale(rechterFrame, from_=0, to=20, orient=HORIZONTAL, length=400, resolution=-1.0, |
|
|
|
rechtsScaleFrequenz = Scale(rechterFrame, from_=0, to=20, orient=HORIZONTAL, length=600, resolution=-1.0, |
|
|
|
command=rechts_scale_frequenz_change) |
|
|
|
rechtsScaleFrequenz.grid(column=1, row=1, columnspan=10, sticky=(W+E)) |
|
|
|
|
|
|
@@ -217,26 +247,26 @@ rechtsSeparator.grid(column=0, row=2, columnspan=10, sticky=(W + E)) |
|
|
|
# ----------- RAUSCHEN -------------------- |
|
|
|
rechtsLabelRauschenLautstärke = Label(rechterFrame, text="Rauschen Lautstärke %", anchor="w") |
|
|
|
rechtsLabelRauschenLautstärke.grid(column=0, row=3, sticky=W) |
|
|
|
rechtsScaleRauschenLautstärke = Scale(rechterFrame, from_=0, to=100, orient=HORIZONTAL, length=400, |
|
|
|
rechtsScaleRauschenLautstärke = Scale(rechterFrame, from_=0, to=100, orient=HORIZONTAL, length=600, |
|
|
|
command=rechts_scale_rauschen_lautstärke_change) |
|
|
|
rechtsScaleRauschenLautstärke.grid(column=1, row=3, sticky=(W+E)) |
|
|
|
|
|
|
|
rechtsLabelRauschenMittelFrequenz = Label(rechterFrame, text="Rauschen Mittelfrequenz [kHz]", anchor="w") |
|
|
|
rechtsLabelRauschenMittelFrequenz .grid(column=0, row=4) |
|
|
|
rechtsScaleRauschenMittelFrequenz = Scale(rechterFrame, from_=0, to=20, orient=HORIZONTAL, length=400, resolution=-1.0, |
|
|
|
rechtsScaleRauschenMittelFrequenz = Scale(rechterFrame, from_=0, to=20, orient=HORIZONTAL, length=600, resolution=-1.0, |
|
|
|
command=rechts_scale_rauschen_mittelfrequenz_change) |
|
|
|
rechtsScaleRauschenMittelFrequenz.grid(column=1, row=4) |
|
|
|
|
|
|
|
rechtsLabelRauschenBandbreite = Label(rechterFrame, text="Rauschen Bandbreite [kHz]", anchor="w") |
|
|
|
rechtsLabelRauschenBandbreite.grid(column=0, row=5, sticky=W) |
|
|
|
rechtsScaleRauschenBandbreite = Scale(rechterFrame, from_=0, to=20, orient=HORIZONTAL, length=400, resolution=-1.0, |
|
|
|
rechtsScaleRauschenBandbreite = Scale(rechterFrame, from_=0, to=20, orient=HORIZONTAL, length=600, resolution=-1.0, |
|
|
|
command=rechts_scale_rauschen_bandbreite_change) |
|
|
|
rechtsScaleRauschenBandbreite.grid(column=1, row=5, sticky=(W+E)) |
|
|
|
|
|
|
|
|
|
|
|
"""------------------------------------------------ UNTERER FRAME----------------------------------------------------""" |
|
|
|
"""------------------------------------------------ UNTERER LINKER FRAME---------------------------------------------""" |
|
|
|
untererFrame = LabelFrame(root, text="Generelles", border=10) |
|
|
|
untererFrame.grid(column=0, row=1, sticky=(N + W + S), columnspan=2) |
|
|
|
untererFrame.grid(column=0, row=1, sticky=(N + W + S + E)) |
|
|
|
|
|
|
|
vorname = StringVar() # Name des Patienten als String um den generierten Tinnitus später zuordnen zu können |
|
|
|
nachname = StringVar() |
|
|
@@ -293,6 +323,17 @@ untenButtonSpeichern = Button(untererFrame, text="Speichern", font="bold", |
|
|
|
untenButtonSpeichern.grid(column=4, row=6, sticky=S) |
|
|
|
|
|
|
|
|
|
|
|
"""--------------------------------------UNTERER RECHTER FRAME-------------------------------------------------------""" |
|
|
|
|
|
|
|
untererRechterFrame = LabelFrame(root, text="Programm Feedback") |
|
|
|
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.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 |
|
|
|
|
|
|
|
|
|
|
|
|