from tkinter.ttk import Frame, Label, Button, LabelFrame, Combobox, Style, Checkbutton, Entry, Panedwindow, Separator from tkinter import * from SoundGenerator import * import csv """--------------------------FUNKTIONEN DIE DURCH GUI KLICKS AUSGEFÜHRT WERDEN---------------------------------------""" """-------Funktionen links-------------""" def links_scale_lautstärke_change(self): tinnitus.linksLautstaerke = float(linksScaleLautstärke.get())/100 # scale liefert 0-100%, tinnitus.lautstärke 0-1 print("Links Lautstärke =", tinnitus.linksLautstaerke*100, "%") sound.play() def links_scale_frequenz_change(self): tinnitus.linksFrequenz = float(linksScaleFrequenz.get())*1000 # scale liefert 20-20kHz, tinnitus.frequenz in Hz print("Links Frequenz = ", tinnitus.linksFrequenz, " Hz") sound.play() def links_scale_rauschen_lautstärke_change(self): tinnitus.linksRauschenLautstaerke = float(linksScaleRauschenLautstärke.get()/1000) print("Links Rauschen Lautstärke = ", tinnitus.linksRauschenLautstaerke*1000, "%") sound.play() def links_scale_rauschen_mittelfrequenz_change(self): linksRauschenMittelfrequenz = float(linksScaleRauschenMittelFrequenz.get()) print("Links Rauschen Mittelfrequenz = ", linksRauschenMittelfrequenz) sound.play() def links_scale_rauschen_bandbreite_change(self): linksRauschenBandbreite = float(linksScaleRauschenBandbreite.get()) print("Links Rauschen Bandbreite = ", linksRauschenBandbreite) sound.play() """----------Funktionen rechts----------""" def rechts_scale_lautstärke_change(self): tinnitus.rechtsLautstaerke = float(rechtsScaleLautstärke.get()/100) print("Rechts Lautstärke =", tinnitus.rechtsLautstaerke, "%") sound.play() def rechts_scale_frequenz_change(self): tinnitus.rechtsFrequenz = float(rechtsScaleFrequenz.get()*1000) print("Rechts Frequenz= ", tinnitus.rechtsFrequenz, " Hz") sound.play() def rechts_scale_rauschen_lautstärke_change(self): tinnitus.rechtsRauschenLautstaerke = float(rechtsScaleRauschenLautstärke.get()/1000) print("Rechts Rauschen Lautstärke = ", tinnitus.rechtsRauschenLautstaerke*1000, "%") sound.play() def rechts_scale_rauschen_mittelfrequenz_change(self): rechtsRauschenMittelfrequenz = float(rechtsScaleRauschenMittelFrequenz.get()) print("Rechts Rauschen Mittelfrequenz = ", rechtsRauschenMittelfrequenz) sound.play() def rechts_scale_rauschen_bandbreite_change(self): rechtsRauschenBandbreite = float(rechtsScaleRauschenBandbreite.get()) print("Rechts Rauschen Bandbreite = ", rechtsRauschenBandbreite) sound.play() """--------------Funktionen unten------------------""" 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 == "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()) if auswahl == "Rechtes Ohr": # rechts --> links linksScaleLautstärke.set(rechtsScaleLautstärke.get()) linksScaleFrequenz.set(rechtsScaleFrequenz.get()) linksScaleRauschenLautstärke.set(rechtsScaleRauschenLautstärke.get()) linksScaleRauschenMittelFrequenz.set(rechtsScaleRauschenMittelFrequenz.get()) linksScaleRauschenBandbreite.set(rechtsScaleRauschenBandbreite.get()) def unten_button_speichern_press(): print("button speichern pressed") # Wenn man Speichern will bevor ein Name eingegeben wurde if (not untenEntryVorname.get()) or (not untenEntryNachname.get()) or \ (untenEntryNachname == "Erst Namen..") or (untenEntryVorname == "..eintragen bitte"): nachname.set("Erst Namen..") vorname.set("..eintragen bitte") print("fehlgeschlagener Speicherversuch - Keine Eingaben gemacht") else: tinnitus.vorname = untenEntryVorname.get() tinnitus.nachname = untenEntryNachname.get() tinnitus.kommentar = untenTextKommentar.get("1.0", END) print("Speichere Patientendaten, siehe TinnitusDaten.csv") tinnitus.speichern() def unten_button_play_press(): print("button play pressed -> mute=false") sound.mute = False sound.play() def unten_button_stop_press(): print("button stop press -> mute=true") sound.mute = True sound.stop() """""" tinnitus = Tinnitus() sound = Sound(tinnitus) print("test") """------------------------------------------ AUFBAU DES ROOT WINDOWS -----------------------------------------------""" root = Tk() # build the main window root.title("Tinnitus Analyse") #root.iconbitmap('headphones.ico') #todo: fix icon #root.minsize(width=200, height=600) root.resizable(True, True) root.columnconfigure(0, weight=1) # falls freier Platz im Fenster ist, werden die Frames diesen benutzen root.rowconfigure(0, weight=1) """------------------------------------------LINKER FRAME------------------------------------------------------------""" linkerFrame = LabelFrame(root, text="Linkes Ohr", font="bold") # parent is root, padding is extra space at the edges linkerFrame.grid(column=0, row=0, sticky=(N + W + E)) # the frame sticks to every side of the window when resized linksLautstärke = DoubleVar() linksFrequenz = DoubleVar() linksRauschenLautstärke = DoubleVar() 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=700, command=links_scale_lautstärke_change) linksScaleLautstärke.grid(column=1, row=0, columnspan=10, sticky=W) # -------- 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=700, resolution=-1.0, command=links_scale_frequenz_change) linksScaleFrequenz.grid(column=1, row=1, columnspan=10, sticky=(W+E)) # ----------- ABTRENNSTRICH ---------------- linksSeparator = Separator(linkerFrame, orient="horizontal") linksSeparator.grid(column=0, row=2, columnspan=10, sticky=(W + E)) # ----------- 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=700, 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) linksScaleRauschenMittelFrequenz = Scale(linkerFrame, from_=0, to=20, orient=HORIZONTAL, length=700, resolution=-1.0, command=links_scale_rauschen_mittelfrequenz_change) linksScaleRauschenMittelFrequenz.grid(column=1, row=4) 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=700, 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)) # Variablen Rechts rechtsFrequenz = DoubleVar() rechtsRauschenLautstärke = DoubleVar() rechtsRauschenFrequenzband = DoubleVar() 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=700, 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=700, resolution=-1.0, command=rechts_scale_frequenz_change) rechtsScaleFrequenz.grid(column=1, row=1, columnspan=10, sticky=(W+E)) # ----------- ABTRENNSTRICH ---------------- rechtsSeparator = Separator(rechterFrame, orient="horizontal") 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=700, 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=700, 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=700, resolution=-1.0, command=rechts_scale_rauschen_bandbreite_change) rechtsScaleRauschenBandbreite.grid(column=1, row=5, sticky=(W+E)) """------------------------------------------------ UNTERER FRAME----------------------------------------------------""" untererFrame = LabelFrame(root, text="Generelles", border=10) untererFrame.grid(column=0, row=1, sticky=(N + W + S)) vorname = StringVar() # Name des Patienten als String um den generierten Tinnitus später zuordnen zu können nachname = StringVar() kommentare = StringVar() # Ein Feld in dass der Patient noch weitere Kommentare angeben kann # Den unteren Frame füllen---------------------------------------------------------------------------------------------- # --------- OHREN SYNCHRONISIEREN ----------------------- untenLabelOhrenSynchro = Label(untererFrame, text="Einstellungen von ") untenLabelOhrenSynchro.grid(column=0, row=0, sticky=(N + W)) untenComboOhrenSynchro = Combobox(untererFrame, values=["Linkes Ohr", "Rechtes Ohr"]) untenComboOhrenSynchro.grid(column=1, row=0, sticky=(N + W + E + S)) untenLabelOhrenSynchro2 = Label(untererFrame, text=" für beide übernehmen") untenLabelOhrenSynchro2.grid(column=2, row=0, sticky=(N + W + E + S)) untenButtonOhrenSynchro = Button(untererFrame, text="Bestätigen", command=unten_button_ohren_synchro) untenButtonOhrenSynchro.grid(column=3, row=0, sticky=(N + W + E + S)) #----------- PLAY BUTTON untenButtonPlay = Button(untererFrame, text="PLAY", font="bold", relief="raised", bg="green", fg="white", command=unten_button_play_press) untenButtonPlay.grid(column=8, row=0, sticky=(N + W + E + S)) #------------STOP BUTTON------------- untenButtonStop = Button(untererFrame, text="STOP", font="bold", relief="raised", bg="red", fg="white", command=unten_button_stop_press) untenButtonStop.grid(column=9, row=0, sticky=(N + W + E + S)) # ----------- ABTRENNSTRICHE ---------------- untenSeparator = Separator(untererFrame, orient="horizontal") untenSeparator.grid(column=0, row=1, columnspan=10, sticky=(W + E)) untenSeperator2 = Separator(untererFrame, orient="vertical") untenSeperator2.grid(column=5, rowspan=5, sticky=N+S) # ------------NAMENSEINGABE------------- untenLabelNachname = Label(untererFrame, text="Nachname:") untenLabelNachname.grid(column=0, row=2, sticky=W) untenEntryNachname = Entry(untererFrame, textvariable=nachname) untenEntryNachname.grid(column=1, row=2, sticky=W) untenLabelVorname = Label(untererFrame, text="Vorname:") untenLabelVorname.grid(column=0, row=3, sticky=W) untenEntryVorname = Entry(untererFrame, textvariable=vorname) untenEntryVorname.grid(column=1, row=3, sticky=W) # ------------ KOMMENTAR ---------------- untenLabelKommentar = Label(untererFrame, text="weitere Kommentare:") untenLabelKommentar.grid(column=0, row=4, sticky=W) untenTextKommentar = Text(untererFrame, height=10, width=50) # create a field where u can enter text untenTextKommentar.grid(column=1, row=4, columnspan=3, rowspan=3) # ----------- SPEICHERN -------------------- untenButtonSpeichern = Button(untererFrame, text="Speichern", font="bold", command=unten_button_speichern_press) untenButtonSpeichern.grid(column=4, row=6, sticky=S) # todo: , relief="raised" für play button root.mainloop()