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 14KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. from tkinter.ttk import Frame, Label, Button, LabelFrame, Combobox, Style, Checkbutton, Entry, Panedwindow, Separator
  2. from tkinter import *
  3. from SoundGenerator import *
  4. import csv
  5. """--------------------------FUNKTIONEN DIE DURCH GUI KLICKS AUSGEFÜHRT WERDEN---------------------------------------"""
  6. """-------Funktionen links-------------"""
  7. def links_scale_lautstärke_change(self):
  8. tinnitus.linksLautstaerke = float(linksScaleLautstärke.get())/100 # scale liefert 0-100%, tinnitus.lautstärke 0-1
  9. print("Links Lautstärke =", tinnitus.linksLautstaerke*100, "%")
  10. sound.play()
  11. def links_scale_frequenz_change(self):
  12. tinnitus.linksFrequenz = float(linksScaleFrequenz.get())*1000 # scale liefert 20-20kHz, tinnitus.frequenz in Hz
  13. print("Links Frequenz = ", tinnitus.linksFrequenz, " Hz")
  14. sound.play()
  15. def links_scale_rauschen_lautstärke_change(self):
  16. tinnitus.linksRauschenLautstaerke = float(linksScaleRauschenLautstärke.get()/1000)
  17. print("Links Rauschen Lautstärke = ", tinnitus.linksRauschenLautstaerke*1000, "%")
  18. sound.play()
  19. def links_scale_rauschen_mittelfrequenz_change(self):
  20. linksRauschenMittelfrequenz = float(linksScaleRauschenMittelFrequenz.get())
  21. print("Links Rauschen Mittelfrequenz = ", linksRauschenMittelfrequenz)
  22. sound.play()
  23. def links_scale_rauschen_bandbreite_change(self):
  24. linksRauschenBandbreite = float(linksScaleRauschenBandbreite.get())
  25. print("Links Rauschen Bandbreite = ", linksRauschenBandbreite)
  26. sound.play()
  27. """----------Funktionen rechts----------"""
  28. def rechts_scale_lautstärke_change(self):
  29. tinnitus.rechtsLautstaerke = float(rechtsScaleLautstärke.get()/100)
  30. print("Rechts Lautstärke =", tinnitus.rechtsLautstaerke, "%")
  31. sound.play()
  32. def rechts_scale_frequenz_change(self):
  33. tinnitus.rechtsFrequenz = float(rechtsScaleFrequenz.get()*1000)
  34. print("Rechts Frequenz= ", tinnitus.rechtsFrequenz, " Hz")
  35. sound.play()
  36. def rechts_scale_rauschen_lautstärke_change(self):
  37. tinnitus.rechtsRauschenLautstaerke = float(rechtsScaleRauschenLautstärke.get()/1000)
  38. print("Rechts Rauschen Lautstärke = ", tinnitus.rechtsRauschenLautstaerke*1000, "%")
  39. sound.play()
  40. def rechts_scale_rauschen_mittelfrequenz_change(self):
  41. rechtsRauschenMittelfrequenz = float(rechtsScaleRauschenMittelFrequenz.get())
  42. print("Rechts Rauschen Mittelfrequenz = ", rechtsRauschenMittelfrequenz)
  43. sound.play()
  44. def rechts_scale_rauschen_bandbreite_change(self):
  45. rechtsRauschenBandbreite = float(rechtsScaleRauschenBandbreite.get())
  46. print("Rechts Rauschen Bandbreite = ", rechtsRauschenBandbreite)
  47. sound.play()
  48. """--------------Funktionen unten------------------"""
  49. def unten_button_ohren_synchro():
  50. auswahl = untenComboOhrenSynchro.get() # holt die momentane Auswahl aus combobox
  51. print("Einstellungen von:" + auswahl + " das auf das jeweils andere Ohr setzen")
  52. if auswahl == "Linkes Ohr": # linkes --> rechts
  53. rechtsScaleLautstärke.set(linksScaleLautstärke.get())
  54. rechtsScaleFrequenz.set(linksScaleFrequenz.get())
  55. rechtsScaleRauschenLautstärke.set(linksScaleRauschenLautstärke.get())
  56. rechtsScaleRauschenMittelFrequenz.set(linksScaleRauschenMittelFrequenz.get())
  57. rechtsScaleRauschenBandbreite.set(linksScaleRauschenBandbreite.get())
  58. if auswahl == "Rechtes Ohr": # rechts --> links
  59. linksScaleLautstärke.set(rechtsScaleLautstärke.get())
  60. linksScaleFrequenz.set(rechtsScaleFrequenz.get())
  61. linksScaleRauschenLautstärke.set(rechtsScaleRauschenLautstärke.get())
  62. linksScaleRauschenMittelFrequenz.set(rechtsScaleRauschenMittelFrequenz.get())
  63. linksScaleRauschenBandbreite.set(rechtsScaleRauschenBandbreite.get())
  64. def unten_button_speichern_press():
  65. print("button speichern pressed")
  66. # Wenn man Speichern will bevor ein Name eingegeben wurde kann man nicht speichern
  67. if (not untenEntryVorname.get()) or (not untenEntryNachname.get()) or \
  68. (untenEntryNachname == "Erst Namen..") or (untenEntryVorname == "..eintragen bitte"):
  69. nachname.set("Erst Namen..")
  70. vorname.set("..eintragen bitte")
  71. print("fehlgeschlagener Speicherversuch - Keine Eingaben gemacht")
  72. else:
  73. tinnitus.vorname = untenEntryVorname.get()
  74. tinnitus.nachname = untenEntryNachname.get()
  75. tinnitus.kommentar = untenTextKommentar.get("1.0", END)
  76. print("Speichere Patientendaten, siehe TinnitusDaten.csv")
  77. tinnitus.speichern()
  78. sound.wav_speichern()
  79. def unten_button_play_press():
  80. print("button play pressed -> mute=false")
  81. sound.mute = False
  82. sound.play()
  83. def unten_button_stop_press():
  84. print("button stop press -> mute=true")
  85. sound.mute = True
  86. sound.stop()
  87. """"""
  88. tinnitus = Tinnitus()
  89. sound = Sound(tinnitus)
  90. print("test")
  91. """------------------------------------------ AUFBAU DES ROOT WINDOWS -----------------------------------------------"""
  92. root = Tk() # build the main window
  93. root.title("Tinnitus Analyse")
  94. #root.iconbitmap('headphones.ico') #todo: fix icon
  95. root.minsize(width=800, height=500)
  96. root.resizable(True, True)
  97. root.columnconfigure(0, weight=1)
  98. root.columnconfigure(1, weight=1)
  99. root.rowconfigure(0, weight=1)
  100. """------------------------------------------LINKER FRAME------------------------------------------------------------"""
  101. linkerFrame = LabelFrame(root, text="Linkes Ohr", font="bold") # parent is root, padding is extra space at the edges
  102. linkerFrame.grid(column=0, row=0, sticky=(N+W+E+S)) # the frame sticks to every side of the window when resized
  103. linksLautstärke = DoubleVar()
  104. linksFrequenz = DoubleVar()
  105. linksRauschenLautstärke = DoubleVar()
  106. linksRauschenFrequenzband = DoubleVar()
  107. # ------------------ LAUTSTÄRKE ------------------
  108. linksLabelLautstärke = Label(linkerFrame, text="Lautstärke [%]:")
  109. linksLabelLautstärke.grid(column=0, row=0, sticky=W)
  110. linksScaleLautstärke = Scale(linkerFrame, from_=0, to=100, orient=HORIZONTAL, length=400,
  111. command=links_scale_lautstärke_change)
  112. linksScaleLautstärke.grid(column=1, row=0, sticky=N+S+W+E)
  113. # -------- FREQUENZ ------------------------
  114. linksLabelFrequenz = Label(linkerFrame, text="Frequenz [kHz]")
  115. linksLabelFrequenz.grid(column=0, row=1, sticky=W) # sticky = w(est) makes the text left aligned
  116. linksScaleFrequenz = Scale(linkerFrame, from_=0, to=20, orient=HORIZONTAL, length=400, resolution=-1.0,
  117. command=links_scale_frequenz_change)
  118. linksScaleFrequenz.grid(column=1, row=1, sticky=(W+E))
  119. # ----------- ABTRENNSTRICH ----------------
  120. linksSeparator = Separator(linkerFrame, orient="horizontal")
  121. linksSeparator.grid(column=0, row=2, sticky=(W + E), columnspan=3)
  122. # ----------- RAUSCHEN --------------------
  123. linksLabelRauschenLautstärke = Label(linkerFrame, text="Rauschen Lautstärke %", anchor="w")
  124. linksLabelRauschenLautstärke.grid(column=0, row=3, sticky=W)
  125. linksScaleRauschenLautstärke = Scale(linkerFrame, from_=0, to=100, orient=HORIZONTAL, length=400,
  126. command=links_scale_rauschen_lautstärke_change)
  127. linksScaleRauschenLautstärke.grid(column=1, row=3, sticky=(W+E))
  128. linksLabelRauschenMittelFrequenz = Label(linkerFrame, text="Rauschen Mittelfrequenz [kHz]", anchor="w")
  129. linksLabelRauschenMittelFrequenz .grid(column=0, row=4, sticky=(W+E))
  130. linksScaleRauschenMittelFrequenz = Scale(linkerFrame, from_=0, to=20, orient=HORIZONTAL, length=400, resolution=-1.0,
  131. command=links_scale_rauschen_mittelfrequenz_change)
  132. linksScaleRauschenMittelFrequenz.grid(column=1, row=4, sticky=(W+E))
  133. linksLabelRauschenBandbreite= Label(linkerFrame, text="Rauschen Bandbreite [kHz]", anchor="w")
  134. linksLabelRauschenBandbreite.grid(column=0, row=5, sticky=W)
  135. linksScaleRauschenBandbreite = Scale(linkerFrame, from_=0, to=20, orient=HORIZONTAL, length=400, resolution=-1.0,
  136. command=links_scale_rauschen_bandbreite_change)
  137. linksScaleRauschenBandbreite.grid(column=1, row=5, sticky=(W+E))
  138. """----------------------------------------------RECHTER FRAME-------------------------------------------------------"""
  139. rechterFrame = LabelFrame(root, text="Rechtes Ohr", font="bold")
  140. rechterFrame.grid(column=2, row=0, sticky=(N+E+W+S))
  141. # Variablen Rechts
  142. rechtsFrequenz = DoubleVar()
  143. rechtsRauschenLautstärke = DoubleVar()
  144. rechtsRauschenFrequenzband = DoubleVar()
  145. rechtsLautstärke = DoubleVar()
  146. # ------------------ LAUTSTÄRKE ------------------
  147. rechtsLabelLautstärke = Label(rechterFrame, text="Lautstärke [%]:")
  148. rechtsLabelLautstärke.grid(column=0, row=0, sticky=W)
  149. rechtsScaleLautstärke = Scale(rechterFrame, from_=0, to=100, orient=HORIZONTAL, length=400,
  150. command=rechts_scale_lautstärke_change)
  151. rechtsScaleLautstärke.grid(column=1, row=0, columnspan=10, sticky=W)
  152. # -------- FREQUENZ ------------------------
  153. rechtsLabelFrequenz = Label(rechterFrame, text="Frequenz [kHz]")
  154. rechtsLabelFrequenz.grid(column=0, row=1, sticky=W) # sticky = w(est) makes the text left aligned
  155. rechtsScaleFrequenz = Scale(rechterFrame, from_=0, to=20, orient=HORIZONTAL, length=400, resolution=-1.0,
  156. command=rechts_scale_frequenz_change)
  157. rechtsScaleFrequenz.grid(column=1, row=1, columnspan=10, sticky=(W+E))
  158. # ----------- ABTRENNSTRICH ----------------
  159. rechtsSeparator = Separator(rechterFrame, orient="horizontal")
  160. rechtsSeparator.grid(column=0, row=2, columnspan=10, sticky=(W + E))
  161. # ----------- RAUSCHEN --------------------
  162. rechtsLabelRauschenLautstärke = Label(rechterFrame, text="Rauschen Lautstärke %", anchor="w")
  163. rechtsLabelRauschenLautstärke.grid(column=0, row=3, sticky=W)
  164. rechtsScaleRauschenLautstärke = Scale(rechterFrame, from_=0, to=100, orient=HORIZONTAL, length=400,
  165. command=rechts_scale_rauschen_lautstärke_change)
  166. rechtsScaleRauschenLautstärke.grid(column=1, row=3, sticky=(W+E))
  167. rechtsLabelRauschenMittelFrequenz = Label(rechterFrame, text="Rauschen Mittelfrequenz [kHz]", anchor="w")
  168. rechtsLabelRauschenMittelFrequenz .grid(column=0, row=4)
  169. rechtsScaleRauschenMittelFrequenz = Scale(rechterFrame, from_=0, to=20, orient=HORIZONTAL, length=400, resolution=-1.0,
  170. command=rechts_scale_rauschen_mittelfrequenz_change)
  171. rechtsScaleRauschenMittelFrequenz.grid(column=1, row=4)
  172. rechtsLabelRauschenBandbreite = Label(rechterFrame, text="Rauschen Bandbreite [kHz]", anchor="w")
  173. rechtsLabelRauschenBandbreite.grid(column=0, row=5, sticky=W)
  174. rechtsScaleRauschenBandbreite = Scale(rechterFrame, from_=0, to=20, orient=HORIZONTAL, length=400, resolution=-1.0,
  175. command=rechts_scale_rauschen_bandbreite_change)
  176. rechtsScaleRauschenBandbreite.grid(column=1, row=5, sticky=(W+E))
  177. """------------------------------------------------ UNTERER FRAME----------------------------------------------------"""
  178. untererFrame = LabelFrame(root, text="Generelles", border=10)
  179. untererFrame.grid(column=0, row=1, sticky=(N + W + S), columnspan=2)
  180. vorname = StringVar() # Name des Patienten als String um den generierten Tinnitus später zuordnen zu können
  181. nachname = StringVar()
  182. kommentare = StringVar() # Ein Feld in dass der Patient noch weitere Kommentare angeben kann
  183. # Den unteren Frame füllen----------------------------------------------------------------------------------------------
  184. # --------- OHREN SYNCHRONISIEREN -----------------------
  185. untenLabelOhrenSynchro = Label(untererFrame, text="Einstellungen von ")
  186. untenLabelOhrenSynchro.grid(column=0, row=0, sticky=(N + W))
  187. untenComboOhrenSynchro = Combobox(untererFrame, values=["Linkes Ohr", "Rechtes Ohr"])
  188. untenComboOhrenSynchro.grid(column=1, row=0, sticky=(N + W + E + S))
  189. untenLabelOhrenSynchro2 = Label(untererFrame, text=" für beide übernehmen")
  190. untenLabelOhrenSynchro2.grid(column=2, row=0, sticky=(N + W + E + S))
  191. untenButtonOhrenSynchro = Button(untererFrame, text="Bestätigen",
  192. command=unten_button_ohren_synchro)
  193. untenButtonOhrenSynchro.grid(column=3, row=0, sticky=(N + W + E + S))
  194. #----------- PLAY BUTTON
  195. untenButtonPlay = Button(untererFrame, text="PLAY", font="bold", relief="raised", bg="green", fg="white",
  196. command=unten_button_play_press)
  197. untenButtonPlay.grid(column=8, row=0, sticky=(N + W + E + S))
  198. #------------STOP BUTTON-------------
  199. untenButtonStop = Button(untererFrame, text="STOP", font="bold", relief="raised", bg="red", fg="white",
  200. command=unten_button_stop_press)
  201. untenButtonStop.grid(column=9, row=0, sticky=(N + W + E + S))
  202. # ----------- ABTRENNSTRICHE ----------------
  203. untenSeparator = Separator(untererFrame, orient="horizontal")
  204. untenSeparator.grid(column=0, row=1, columnspan=10, sticky=(W + E))
  205. untenSeperator2 = Separator(untererFrame, orient="vertical")
  206. untenSeperator2.grid(column=5, rowspan=5, sticky=N+S)
  207. # ------------NAMENSEINGABE-------------
  208. untenLabelNachname = Label(untererFrame, text="Nachname:")
  209. untenLabelNachname.grid(column=0, row=2, sticky=W)
  210. untenEntryNachname = Entry(untererFrame, textvariable=nachname)
  211. untenEntryNachname.grid(column=1, row=2, sticky=W)
  212. untenLabelVorname = Label(untererFrame, text="Vorname:")
  213. untenLabelVorname.grid(column=0, row=3, sticky=W)
  214. untenEntryVorname = Entry(untererFrame, textvariable=vorname)
  215. untenEntryVorname.grid(column=1, row=3, sticky=W)
  216. # ------------ KOMMENTAR ----------------
  217. untenLabelKommentar = Label(untererFrame, text="weitere Kommentare:")
  218. untenLabelKommentar.grid(column=0, row=4, sticky=W)
  219. untenTextKommentar = Text(untererFrame, height=10, width=50) # create a field where u can enter text
  220. untenTextKommentar.grid(column=1, row=4, columnspan=3, rowspan=3)
  221. # ----------- SPEICHERN --------------------
  222. untenButtonSpeichern = Button(untererFrame, text="Speichern", font="bold",
  223. command=unten_button_speichern_press)
  224. untenButtonSpeichern.grid(column=4, row=6, sticky=S)
  225. root.mainloop()