Datenablage für Tinnitus Therapie Projektarbeit von Julian Seyffer und Heiko Ommert SS2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

TinnitusAnalyse_GUI.py 22KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428
  1. from tkinter import filedialog
  2. from tkinter.ttk import Frame, Label, Button, LabelFrame, Combobox, Style, Checkbutton, Entry, Panedwindow, Separator
  3. from tkinter import *
  4. from SoundGenerator import *
  5. import csv
  6. import time
  7. """--------------------------FUNKTIONEN DIE DURCH GUI KLICKS AUSGEFÜHRT WERDEN---------------------------------------"""
  8. """-------Funktionen links-------------"""
  9. def links_scale_lautstärke_change(self):
  10. tinnitus.linksLautstaerke = float(linksScaleLautstärke.get())/100 # scale liefert 0-100%, tinnitus.lautstärke 0-1
  11. print("Links Lautstärke =", tinnitus.linksLautstaerke*100, "%")
  12. sound.play()
  13. def links_scale_frequenz_change(self):
  14. tinnitus.linksFrequenz = float(linksScaleFrequenz.get())*1000 # scale liefert 20-20kHz, tinnitus.frequenz in Hz
  15. print("Links Frequenz = ", tinnitus.linksFrequenz, " Hz")
  16. sound.play()
  17. def links_scale_rauschen_lautstärke_change(self):
  18. # scale liefert 0-100%, tinnitus.lautstärke zwischen 0-1 (float)
  19. tinnitus.linksRauschenLautstaerke = float(linksScaleRauschenLautstärke.get()/1000)
  20. print("Links Rauschen Lautstärke = ", tinnitus.linksRauschenLautstaerke*1000, "%")
  21. sound.play()
  22. def links_scale_untere_grenzfrequenz_change(self):
  23. og = float(linksScaleObereGrenzfrequenz.get() * 1000) # kHz -> Hz
  24. ug = float(linksScaleUntereGrenzfrequenz.get() * 1000) # kHz -> Hz
  25. if og <= ug: # wenn obere Grenzfreq. kleiner als untere Grenzfreq. ist -> macht keinen Sinn deswegen verbieten
  26. linksScaleUntereGrenzfrequenz.set(linksScaleObereGrenzfrequenz.get() - 0.01)
  27. else:
  28. tinnitus.linksRauschenUntereGrenzfrequenz = ug
  29. sound.play()
  30. def links_scale_obere_grenzfrequenz_change(self):
  31. og = float(linksScaleObereGrenzfrequenz.get()*1000) # kHz -> Hz
  32. ug = float(linksScaleUntereGrenzfrequenz.get() * 1000) # kHz -> Hz
  33. if og <= ug: # wenn obere Grenzfreq. kleiner als untere Grenzfreq. ist -> macht keinen Sinn deswegen verbieten
  34. linksScaleObereGrenzfrequenz.set(linksScaleUntereGrenzfrequenz.get() + 0.01)
  35. else:
  36. tinnitus.linksRauschenObereGrenzfrequenz = og
  37. sound.play()
  38. """----------Funktionen rechts----------"""
  39. def rechts_scale_lautstärke_change(self):
  40. tinnitus.rechtsLautstaerke = float(rechtsScaleLautstärke.get()/100)
  41. print("Rechts Lautstärke =", tinnitus.rechtsLautstaerke, "%")
  42. sound.play()
  43. def rechts_scale_frequenz_change(self):
  44. tinnitus.rechtsFrequenz = float(rechtsScaleFrequenz.get()*1000)
  45. print("Rechts Frequenz= ", tinnitus.rechtsFrequenz, " Hz")
  46. sound.play()
  47. def rechts_scale_rauschen_lautstärke_change(self):
  48. tinnitus.rechtsRauschenLautstaerke = float(rechtsScaleRauschenLautstärke.get()/1000) # 0-100% -> 0-1(float)
  49. print("Rechts Rauschen Lautstärke = ", tinnitus.rechtsRauschenLautstaerke*1000, "%")
  50. sound.play()
  51. def rechts_scale_untere_grenzfrequenz_change(self):
  52. og = float(rechtsScaleObereGrenzfrequenz.get() * 1000) # kHz -> Hz
  53. ug = float(rechtsScaleUntereGrenzfrequenz.get() * 1000) # kHz -> Hz
  54. if ug >= og: # wenn obere Grenzfreq. kleiner als untere Grenzfreq. ist -> macht keinen Sinn deswegen verbieten
  55. rechtsScaleUntereGrenzfrequenz.set(rechtsScaleObereGrenzfrequenz.get()-0.01)
  56. else:
  57. tinnitus.rechtsRauschenUntereGrenzfrequenz = ug
  58. sound.play()
  59. def rechts_scale_obere_grenzfrequenz_change(self):
  60. og = float(rechtsScaleObereGrenzfrequenz.get()*1000) # kHz -> Hz
  61. ug = float(rechtsScaleUntereGrenzfrequenz.get() * 1000) # kHz -> Hz
  62. if og <= ug: # wenn obere Grenzfreq. kleiner als untere Grenzfreq. ist -> macht keinen Sinn deswegen verbieten
  63. rechtsScaleObereGrenzfrequenz.set(rechtsScaleUntereGrenzfrequenz.get()+0.01)
  64. else:
  65. tinnitus.rechtsRauschenObereGrenzfrequenz = og
  66. sound.play()
  67. """--------------Funktionen unten------------------"""
  68. def unten_button_ohren_synchro():
  69. auswahl = untenComboOhrenSynchro.get() # holt die momentane Auswahl aus combobox
  70. print("Einstellungen von:" + auswahl + " das auf das jeweils andere Ohr setzen")
  71. if auswahl == "":
  72. feedback("Bitte wähle ein Ohr", "white", "red")
  73. if auswahl == "Linkes Ohr": # linkes --> rechts
  74. rechtsScaleLautstärke.set(linksScaleLautstärke.get())
  75. rechtsScaleFrequenz.set(linksScaleFrequenz.get())
  76. rechtsScaleRauschenLautstärke.set(linksScaleRauschenLautstärke.get())
  77. rechtsScaleUntereGrenzfrequenz.set(linksScaleUntereGrenzfrequenz.get())
  78. rechtsScaleObereGrenzfrequenz.set(linksScaleObereGrenzfrequenz.get())
  79. feedback("Einstellungen vom linken Ohr auf beide Ohren übertragen")
  80. if auswahl == "Rechtes Ohr": # rechts --> links
  81. linksScaleLautstärke.set(rechtsScaleLautstärke.get())
  82. linksScaleFrequenz.set(rechtsScaleFrequenz.get())
  83. linksScaleRauschenLautstärke.set(rechtsScaleRauschenLautstärke.get())
  84. linksScaleUntereGrenzfrequenz.set(rechtsScaleUntereGrenzfrequenz.get())
  85. linksScaleObereGrenzfrequenz.set(rechtsScaleObereGrenzfrequenz.get())
  86. feedback("Einstellungen vom rechten Ohr auf beide Ohren übertragen")
  87. def unten_button_speichern_press():
  88. print("button speichern pressed")
  89. # Wenn man Speichern will bevor ein Name eingegeben wurde kann man nicht speichern
  90. if (not untenEntryVorname.get()) or (not untenEntryNachname.get()):
  91. print("fehlgeschlagener Speicherversuch - Keine Eingaben gemacht")
  92. feedback("Fehlgeschlagener Speicherversuch! Erst Namen links eintragen.", "white", "red")
  93. else:
  94. try:
  95. unten_button_stop_press() # Wiedergabe beenden, durch den Rechenaufwand gibt es sonst Wiedergabeprobleme
  96. feedback("Speichere Sound als '.wav'-Datei. Das kann ca. 10 Sekunden dauern. Bitte warten...")
  97. tinnitus.vorname = untenEntryVorname.get()
  98. tinnitus.nachname = untenEntryNachname.get()
  99. tinnitus.kommentar = untenTextKommentar.get("1.0", END)
  100. tinnitus.speichern()
  101. sound.wav_speichern()
  102. feedback("Daten erfolgreich gespeichert. Siehe: " + sound.wav_name, "white", "green")
  103. except:
  104. feedback("Fehlgeschlagener Speicherversuch! Bitte schließe Microsoft Excel.", "white", "red")
  105. def unten_button_play_press():
  106. print("button play pressed")
  107. feedback("Starte Audioausgabe...", fontcolor="green")
  108. sound.mute = False # when this boolean is set to false no audio can ever play (it`s like a savety switch)
  109. sound.play()
  110. def unten_button_stop_press():
  111. print("button stop press")
  112. feedback("Stoppe Audioausgabe", fontcolor="red") # place text in feedback field, fontcololor, backgroundcolor
  113. sound.mute = True
  114. sound.stop()
  115. def feedback(text, fontcolor="black", backgroundcolor="lightsteelblue"):
  116. """ This is a helper function. You can give it a string text and it will display it in the feedback frame (bottom
  117. right of the GUI) in the text widget. The parameter color is also a string and defines the font color. Same with
  118. background. Honestly this function is way too complicated, but Tkinter has no nicer/easier builtin way of doing the
  119. coloring nicely """
  120. feedback.lineCounter += 1 # in order to color the texts nicely we need to count the lines of text we add
  121. untenFeedbackText.config(state=NORMAL) # activate text field (otherwise it is readonly)
  122. if feedback.lineCounter == 12: # if we reached the end of the text box
  123. untenFeedbackText.delete("1.0", END) # just delete everything
  124. feedback.lineCounter = 1 # and start at line 1 again
  125. untenFeedbackText.insert(INSERT, text + "\n") # insert the text
  126. # these 2 lines just color the text nicely, but Tkinter forces your to first "tag_add" mark it and specify the
  127. # line number and char number you want to mark. And then "tag_config" change the color of this marked region
  128. untenFeedbackText.tag_add("Line"+str(feedback.lineCounter), str(feedback.lineCounter)+".0", str(float(len(text))))
  129. untenFeedbackText.tag_config("Line"+str(feedback.lineCounter), foreground=fontcolor, background=backgroundcolor)
  130. untenFeedbackText.config(state=DISABLED) # set the text field back to readonly
  131. root.update() #Damit der Text sofort ausgegeben wird, auch wenn das Programm erst noch was anderes macht
  132. def unten_button_musikdatei_laden_press():
  133. """ This function opends a window that lets you select .mp3 and .wav files. The user is supposed to select their
  134. music files here"""
  135. print("button musikdatei laden pressed")
  136. untererFrame.musikdatei = filedialog.askopenfilename(initialdir="/", title="Wähle die Musikdatei deiner Wahl aus (.mp3)",
  137. filetypes=(("wav Dateien", "*.wav"), ("mp3 Dateien", "*.mp3")))
  138. print(untererFrame.musikdatei)
  139. untenTextMusikDatei.config(state=NORMAL) # activate text field (otherwise it is readonly)
  140. untenTextMusikDatei.delete(1.0, END) # delete everything from text widget
  141. untenTextMusikDatei.insert(INSERT, untererFrame.musikdatei) # insert selected file path to text widget
  142. untenTextMusikDatei.config(state=DISABLED) # activate text field (otherwise it is readonly)
  143. feedback("Musikdatei ausgewählt", fontcolor="black") # place text in feedback field, fontcololor, backgroundcolor
  144. def unten_button_tinnitusdatei_laden_press():
  145. """ This function opends a window that lets you select .mp3 and .wav files. The user is supposed to select their
  146. tinnitus files here"""
  147. print("button tinnitusdatei laden pressed")
  148. untererFrame.tinnitusdatei = filedialog.askopenfilename(initialdir="/",
  149. title="Wähle die Musikdatei deiner Wahl aus (.mp3)",
  150. filetypes=(("wav Dateien", "*.wav"), ("mp3 Dateien", "*.mp3")))
  151. print(untererFrame.tinnitusdatei)
  152. untenTextTinnitusDatei.config(state=NORMAL) # activate text field (otherwise it is readonly)
  153. untenTextTinnitusDatei.delete(1.0, END) # delete everything from text widget
  154. untenTextTinnitusDatei.insert(INSERT, untererFrame.musikdatei) # insert selected file path to text widget
  155. untenTextTinnitusDatei.config(state=DISABLED) # activate text field (otherwise it is readonly)
  156. feedback("Tinnitusdatei ausgewählt", fontcolor="black") # place text in feedback field, fontcololor, backgroundcolor
  157. def unten_button_filtere_tinnitus_aus_musik():
  158. print("button filtere tinnitus aus musik pressed")
  159. try:
  160. feedback("Gefilterte Musikdatei erstellt", "blue")
  161. except:
  162. feedback("Fehlgeschlagener Filterversuch!", "red", "white")
  163. """ Initialisierungen """
  164. tinnitus = Tinnitus() # siehe SoundGenerator.py
  165. sound = Sound(tinnitus) # siehe SoundGenerator.py
  166. feedback.lineCounter = 0 # Funktionsvariable der Feedback funktion. Ein Funktionsaufruf Counter
  167. """------------------------------------------ AUFBAU DES ROOT WINDOWS -----------------------------------------------"""
  168. root = Tk() # build the main window
  169. root.title("Tinnitus Analyse")
  170. root.minsize(width=800, height=500) # set windowsize (width an height in pixels)
  171. root.resizable(False, False) # window not resizable (x and y)
  172. """------------------------------------------LINKER FRAME------------------------------------------------------------"""
  173. linkerFrame = LabelFrame(root, text="Linkes Ohr", font="bold") # parent is root, padding is extra space at the edges
  174. linkerFrame.grid(column=0, row=0, sticky=(N+W+E+S)) # the frame sticks to every side of the window when resized
  175. linksLautstärke = DoubleVar()
  176. linksFrequenz = DoubleVar()
  177. linksRauschenLautstärke = DoubleVar()
  178. linksRauschenFrequenzband = DoubleVar()
  179. # ------------------ LAUTSTÄRKE ------------------
  180. linksLabelLautstärke = Label(linkerFrame, text="Lautstärke [%]:")
  181. linksLabelLautstärke.grid(column=0, row=0, sticky=W)
  182. linksScaleLautstärke = Scale(linkerFrame, from_=0, to=100, orient=HORIZONTAL, length=600,
  183. command=links_scale_lautstärke_change)
  184. linksScaleLautstärke.grid(column=1, row=0, sticky=N+S+W+E)
  185. # -------- FREQUENZ ------------------------
  186. linksLabelFrequenz = Label(linkerFrame, text="Frequenz [kHz]")
  187. linksLabelFrequenz.grid(column=0, row=1, sticky=W) # sticky = w(est) makes the text left aligned
  188. linksScaleFrequenz = Scale(linkerFrame, from_=0, to=20, orient=HORIZONTAL, length=600, resolution=-1.0,
  189. command=links_scale_frequenz_change)
  190. linksScaleFrequenz.grid(column=1, row=1, sticky=(W+E))
  191. # ----------- ABTRENNSTRICH ----------------
  192. linksSeparator = Separator(linkerFrame, orient="horizontal")
  193. linksSeparator.grid(column=0, row=2, sticky=(W + E), columnspan=3)
  194. # ----------- RAUSCHEN --------------------
  195. # Lautstärke
  196. linksLabelRauschenLautstärke = Label(linkerFrame, text="Rauschen Lautstärke %", anchor="w")
  197. linksLabelRauschenLautstärke.grid(column=0, row=3, sticky=W)
  198. linksScaleRauschenLautstärke = Scale(linkerFrame, from_=0, to=100, orient=HORIZONTAL, length=600,
  199. command=links_scale_rauschen_lautstärke_change)
  200. linksScaleRauschenLautstärke.grid(column=1, row=3, sticky=(W+E))
  201. # Obere Grenzfrequenz
  202. linksLabelObereGrenzfrequenz = Label(linkerFrame, text="Obere Grenzfrequenz [kHz]", anchor="w")
  203. linksLabelObereGrenzfrequenz.grid(column=0, row=4, sticky=W)
  204. linksScaleObereGrenzfrequenz = Scale(linkerFrame, from_=0.02, to=20, orient=HORIZONTAL, length=600, resolution=-1.0,
  205. command=links_scale_obere_grenzfrequenz_change)
  206. linksScaleObereGrenzfrequenz.grid(column=1, row=4, sticky=(W+E))
  207. linksScaleObereGrenzfrequenz.set(20.00)
  208. # Untere Grenzfrequenz
  209. linksLabelUntereGrenzfrequenz = Label(linkerFrame, text="Untere Grenzfrequenz [kHz]", anchor="w")
  210. linksLabelUntereGrenzfrequenz.grid(column=0, row=5, sticky=(W+E))
  211. linksScaleUntereGrenzfrequenz = Scale(linkerFrame, from_=0.01, to=20, orient=HORIZONTAL, length=600, resolution=-1.0,
  212. command=links_scale_untere_grenzfrequenz_change)
  213. linksScaleUntereGrenzfrequenz.grid(column=1, row=5, sticky=(W+E))
  214. linksScaleUntereGrenzfrequenz.set(0.01)
  215. """----------------------------------------------RECHTER FRAME-------------------------------------------------------"""
  216. rechterFrame = LabelFrame(root, text="Rechtes Ohr", font="bold")
  217. rechterFrame.grid(column=1, row=0, sticky=(N+E+W+S))
  218. # Variablen Rechts
  219. rechtsFrequenz = DoubleVar()
  220. rechtsRauschenLautstärke = DoubleVar()
  221. rechtsRauschenFrequenzband = DoubleVar()
  222. rechtsLautstärke = DoubleVar()
  223. # ------------------ LAUTSTÄRKE ------------------
  224. rechtsLabelLautstärke = Label(rechterFrame, text="Lautstärke [%]:")
  225. rechtsLabelLautstärke.grid(column=0, row=0, sticky=W)
  226. rechtsScaleLautstärke = Scale(rechterFrame, from_=0, to=100, orient=HORIZONTAL, length=600,
  227. command=rechts_scale_lautstärke_change)
  228. rechtsScaleLautstärke.grid(column=1, row=0, columnspan=10, sticky=W)
  229. # -------- FREQUENZ ------------------------
  230. rechtsLabelFrequenz = Label(rechterFrame, text="Frequenz [kHz]")
  231. rechtsLabelFrequenz.grid(column=0, row=1, sticky=W) # sticky = w(est) makes the text left aligned
  232. rechtsScaleFrequenz = Scale(rechterFrame, from_=0, to=20, orient=HORIZONTAL, length=600, resolution=-1.0,
  233. command=rechts_scale_frequenz_change)
  234. rechtsScaleFrequenz.grid(column=1, row=1, columnspan=10, sticky=(W+E))
  235. # ----------- ABTRENNSTRICH ----------------
  236. rechtsSeparator = Separator(rechterFrame, orient="horizontal")
  237. rechtsSeparator.grid(column=0, row=2, columnspan=10, sticky=(W + E))
  238. # ----------- RAUSCHEN --------------------
  239. rechtsLabelRauschenLautstärke = Label(rechterFrame, text="Rauschen Lautstärke %", anchor="w")
  240. rechtsLabelRauschenLautstärke.grid(column=0, row=3, sticky=W)
  241. rechtsScaleRauschenLautstärke = Scale(rechterFrame, from_=0, to=100, orient=HORIZONTAL, length=600,
  242. command=rechts_scale_rauschen_lautstärke_change)
  243. rechtsScaleRauschenLautstärke.grid(column=1, row=3, sticky=(W+E))
  244. # Obere Grenzfrequenz
  245. rechtsLabelObereGrenzfrequenz = Label(rechterFrame, text="Obere Grenzfrequenz [kHz]", anchor="w")
  246. rechtsLabelObereGrenzfrequenz.grid(column=0, row=4, sticky=W)
  247. rechtsScaleObereGrenzfrequenz = Scale(rechterFrame, from_=0.02, to=20, orient=HORIZONTAL, length=600, resolution=-1.0,
  248. command=rechts_scale_obere_grenzfrequenz_change)
  249. rechtsScaleObereGrenzfrequenz.grid(column=1, row=4, sticky=(W+E))
  250. rechtsScaleObereGrenzfrequenz.set(20.00)
  251. # Untere Grenzfrequenz
  252. rechtsLabelUntereGrenzfrequenz = Label(rechterFrame, text="Untere Grenzfrequenz [kHz]", anchor="w")
  253. rechtsLabelUntereGrenzfrequenz.grid(column=0, row=5, sticky=(W+E))
  254. rechtsScaleUntereGrenzfrequenz = Scale(rechterFrame, from_=0.01, to=20, orient=HORIZONTAL, length=600, resolution=-1.0,
  255. command=rechts_scale_untere_grenzfrequenz_change)
  256. rechtsScaleUntereGrenzfrequenz.grid(column=1, row=5, sticky=(W+E))
  257. rechtsScaleUntereGrenzfrequenz.set(0.01)
  258. """------------------------------------------------ UNTERER LINKER FRAME---------------------------------------------"""
  259. untererFrame = LabelFrame(root, text="Generelles", border=10)
  260. untererFrame.grid(column=0, row=1, sticky=(N + W + S + E))
  261. vorname = StringVar() # Name des Patienten als String um den generierten Tinnitus später zuordnen zu können
  262. nachname = StringVar()
  263. kommentare = StringVar() # Ein Feld in dass der Patient noch weitere Kommentare angeben kann
  264. # Den unteren Frame füllen----------------------------------------------------------------------------------------------
  265. # --------- OHREN SYNCHRONISIEREN -----------------------
  266. untenLabelOhrenSynchro = Label(untererFrame, text="Einstellungen von ")
  267. untenLabelOhrenSynchro.grid(column=0, row=0, sticky=(N + W))
  268. untenComboOhrenSynchro = Combobox(untererFrame, values=["Linkes Ohr", "Rechtes Ohr"])
  269. untenComboOhrenSynchro.grid(column=1, row=0, sticky=(N + W + E + S))
  270. untenLabelOhrenSynchro2 = Label(untererFrame, text=" für beide übernehmen")
  271. untenLabelOhrenSynchro2.grid(column=2, row=0, sticky=(N + W + E + S))
  272. untenButtonOhrenSynchro = Button(untererFrame, text="Bestätigen",
  273. command=unten_button_ohren_synchro)
  274. untenButtonOhrenSynchro.grid(column=3, row=0, sticky=(N + W + E + S))
  275. #----------- PLAY BUTTON
  276. untenButtonPlay = Button(untererFrame, text="PLAY", font="bold", relief="raised", bg="green", fg="white",
  277. command=unten_button_play_press)
  278. untenButtonPlay.grid(column=8, row=0, sticky=(N + W + E + S))
  279. #------------STOP BUTTON-------------
  280. untenButtonStop = Button(untererFrame, text="STOP", font="bold", relief="raised", bg="red", fg="white",
  281. command=unten_button_stop_press)
  282. untenButtonStop.grid(column=9, row=0, sticky=(N + W + E + S))
  283. # ----------- ABTRENNSTRICHE ----------------
  284. untenSeparator = Separator(untererFrame, orient="horizontal")
  285. untenSeparator.grid(column=0, row=1, columnspan=10, sticky=(W + E))
  286. untenSeperator2 = Separator(untererFrame, orient="vertical")
  287. untenSeperator2.grid(column=5, rowspan=5, sticky=N+S)
  288. # ------------NAMENSEINGABE-------------
  289. untenLabelNachname = Label(untererFrame, text="Nachname:")
  290. untenLabelNachname.grid(column=0, row=2, sticky=W)
  291. untenEntryNachname = Entry(untererFrame, textvariable=nachname)
  292. untenEntryNachname.grid(column=1, row=2, sticky=W)
  293. untenLabelVorname = Label(untererFrame, text="Vorname:")
  294. untenLabelVorname.grid(column=0, row=3, sticky=W)
  295. untenEntryVorname = Entry(untererFrame, textvariable=vorname)
  296. untenEntryVorname.grid(column=1, row=3, sticky=W)
  297. # ------------ KOMMENTAR ----------------
  298. untenLabelKommentar = Label(untererFrame, text="weitere Kommentare:")
  299. untenLabelKommentar.grid(column=0, row=4, sticky=W)
  300. untenTextKommentar = Text(untererFrame, height=10, width=50) # create a field where u can enter text
  301. untenTextKommentar.grid(column=1, row=4, columnspan=3, rowspan=3)
  302. # ----------- SPEICHERN --------------------
  303. untenButtonSpeichern = Button(untererFrame, text="Speichern", font="bold",
  304. command=unten_button_speichern_press)
  305. untenButtonSpeichern.grid(column=4, row=6, sticky=S)
  306. """--------------------------------------UNTERER RECHTER FRAME-------------------------------------------------------"""
  307. untererRechterFrame = LabelFrame(root, text="Programm Feedback")
  308. untererRechterFrame.grid(row=1, column=1, sticky=(N+S+E+W))
  309. # ------------ PROGRAMM OUTPUT ------------
  310. untenFeedbackText = Text(untererRechterFrame, height=13, width=85, bg="lightsteelblue") # write feedback to patient here
  311. #untenFeedbackText.config(state=DISABLED) # make the text widget readonly
  312. untenFeedbackText.place(relx=.5, rely=.5, anchor="center") # the only time I used .place instead of grid, because it
  313. # lets me place the widget in the middle of the frame
  314. # -------------- LOAD MUSIC FILE--------------
  315. untenTextMusikDatei = Text(untererFrame, height=1, width=50)
  316. untenTextMusikDatei.grid(column=0, row=7, sticky=(N+S+E+W), columnspan=6)
  317. untenTextMusikDatei.insert(INSERT, "Einen Song deiner Wahl hier auswählen") # insert selected file path to text widget
  318. untenTextMusikDatei.config(state=DISABLED) # activate text field (otherwise it is readonly)
  319. untenButtonMusikDateiLaden = Button(untererFrame, text="Musikdatei auswählen",
  320. command=unten_button_musikdatei_laden_press)
  321. untenButtonMusikDateiLaden.grid(column=7, row=7, sticky=(N+S+E+W))
  322. # --------------- LOAD MEINTINNTISU.WAV FILE---------------------
  323. untenTextTinnitusDatei = Text(untererFrame, height=1, width=50)
  324. untenTextTinnitusDatei.grid(column=0, row=8, sticky=(N+S+E+W), columnspan=6)
  325. untenTextTinnitusDatei.insert(INSERT, "Deine MeinTinnitus.wav Datei hier auswählen") # insert selected file path to text widget
  326. untenTextTinnitusDatei.config(state=DISABLED) # activate text field (otherwise it is readonly)
  327. untenButtonTinnitusDateiLaden = Button(untererFrame, text="Tinnitusdatei auswählen",
  328. command=unten_button_tinnitusdatei_laden_press)
  329. untenButtonTinnitusDateiLaden.grid(column=7, row=8, sticky=(N+S+E+W))
  330. untenButtonFiltereTinnitusAusMusik = Button(untererFrame, text="Filtere Tinnitus Frequenzen aus Musik",
  331. command=unten_button_filtere_tinnitus_aus_musik, font="bold",
  332. relief="raised", bg="blue", fg="white",)
  333. untenButtonFiltereTinnitusAusMusik.grid(column=0, row=9, sticky=(N+S+E+W))
  334. root.mainloop()