# -*- coding: utf-8 -*- """ Created on Fri Sep 4 11:36:24 2020 @author: Igor Beloschapkin """ from tkinter import * import tkinter.font as tkFont import subprocess # own code: # from questionnaire import quest # TODO Eventuell updatefunktion über git pull mit einbauen! ################################################## # Config Beginn # Folgende Strings bitte an jeweiligen PC anpassen # in folgendem Format: variable = r'C:\Pfad' ("r" vor Pfad nicht vergessen!!!) # Hier findet man die Ordner batch, data, icons, parms, prog, tools pathBci2000 = r'C:\BCI2000\BCI2000 v3.6.beta.R5570\BCI2000.x64' # Hier findet man den TactileBCIFilter.exe pathTactileBciFilter = r'C:\Users\bci\Desktop\Qt Filter Program\build-TactileBCIFilter-Desktop_Qt_5_15_0_MinGW_32_bit-Release\release' # Hier findet man die P300Classifier.exe pathP300Classifier = r'C:\Users\bci\Desktop\Igor\PythonBCIgui_v0.2\bin' # TODO Config in txt file verlagern oder sogar Config Einstellung!!! # tk_chooseDirectory # tk_getOpenFile # Config Ende ################################################## class App: def __init__(self, master): # self.paradigmText = sys.argv[1] # App.paradigmText = sys.argv[1] # print sys.argv[1] # pathOrigin = os.path.dirname(os.path.realpath(__file__)) # TODO current working directory auf root von dieser file setzen # global pathSave # pathSave = "\\questions\\" + self.paradigmText # pathSave = os.getcwd() + pathSave # Einstellung der GUI Größe textH = 4 textHsmall = 4 textW = 20 def makeBtn(self, text, bg, command, side): self.button = Button(frame, text=text, bg=bg, command=command) self.button.config( height = textH, width = textW ) self.button['font'] = tkFont.Font(family='Helvetica', size=36, weight='bold') self.button.pack(side=side) return self.button def makeBtnSmall(self, text, bg, command, side): self.button = Button(frame, text=text, bg=bg, command=command) self.button.config( height = textHsmall, width = textW ) self.button['font'] = tkFont.Font(family='Helvetica', size=16, weight='bold') self.button.pack(side=side) return self.button frame = Frame(master) frame.pack() # button generation self.Bfilter = makeBtnSmall(self, "1. Filter", "lightyellow", self.btn_filter, TOP) self.BtacCal = makeBtnSmall(self, "2. Kalibrierung", "lightgreen", self.btn_tacCal, TOP) self.Bp300 = makeBtnSmall(self, "3. P300 Klassifizierung", "orange", self.btn_p300, TOP) self.BtacCopy = makeBtnSmall(self, "4. Freies Buchstabieren", "lightblue", self.btn_tacCopy, TOP) self.BtacSimul = makeBtnSmall(self, "5. Rollstuhlsimulator", "pink", self.btn_tacSimul, TOP) # self.BtacQuest = makeBtnSmall(self, "6. Fragebogen", "green", self.btn_tacQuest, TOP) self.BtacSettings = makeBtnSmall(self, "Einstellungen", "gray", self.btn_settings, TOP) frame.rowconfigure((0,1), weight=1) # make buttons stretch when frame.columnconfigure((0,2), weight=1) # when window is resized # TODO Hilfestellung nach jedem Button aufploppen lassen: # Was tun? Wo klicken? Welche File wo laden? # 1. FILTER ################################## def btn_filter(self): print('Starte TactileBCIFilter.exe') subprocess.Popen(pathTactileBciFilter + '\TactileBCIFilter.exe') # 2. KALIBIERUNGEN ########################### def btn_tacCal(self): print('starte taktile Kalibrierung') subprocess.Popen([pathBci2000 + '\prog\Operator.exe', '--OnConnect', '-LOAD PARAMETERFILE TactileCalibration.prm']) subprocess.Popen([pathBci2000 + '\prog\gUSBampSource.exe', '127.0.0.1']) subprocess.Popen([pathBci2000 + '\prog\P3SignalProcessing.exe', '127.0.0.1']) subprocess.Popen([pathBci2000 + '\prog\P3Speller.exe', '127.0.0.1']) # TODO Lock einführen und bei Returnwert Lock öffnen # 3. P300 Classifier ######################### def btn_p300(self): print('Starte P300Classifier.exe') subprocess.Popen(pathP300Classifier + '\P300Classifier.exe') # 4. COPYSPELL ########################### def btn_tacCopy(self): print('Starte taktilen Copyspeller') subprocess.Popen([pathBci2000 + '\prog\Operator.exe', '--OnConnect', '-LOAD PARAMETERFILE TactileCopy.prm']) subprocess.Popen([pathBci2000 + '\prog\gUSBampSource.exe', '127.0.0.1']) subprocess.Popen([pathBci2000 + '\prog\P3SignalProcessing.exe', '127.0.0.1']) subprocess.Popen([pathBci2000 + '\prog\P3Speller.exe', '127.0.0.1']) # 5. WHEELCHAIR SIMULATOR ########################### def btn_tacSimul(self): print('Starte Wheelchair Simulator') # TODO Starte Wheelchair Simulator Programm subprocess.Popen([pathBci2000 + '\prog\Operator.exe', '--OnConnect', '-LOAD PARAMETERFILE TactileDrive.prm']) subprocess.Popen([pathBci2000 + '\prog\gUSBampSource.exe', '127.0.0.1']) subprocess.Popen([pathBci2000 + '\prog\P3SignalProcessing.exe', '127.0.0.1']) subprocess.Popen([pathBci2000 + '\prog\P3Speller.exe', '127.0.0.1']) # QUESTIONNAIRE PROMPT ########################### # def btn_visQuest(self): # #os.system('python .\PythonBCIgui\q-helper.py ' + "Visual") # root.destroy() # self.startQuestions("Visual") # def btn_tacQuest(self): #root.destroy() # self.startQuestions("Tactile") # def btn_audQuest(self): # root.destroy() # self.startQuestions("Auditory") # def startQuestions(self, para): # print('Starte Fragebogen') # q = quest(para) # q.qSatisfaction() # q.qExhaustion() # q.qSubjControl() # q.qCtrlChange() # q.save() # X. Settings ######################### def btn_settings(self): print('Einstellungen') def global_close(self, window): print('Beenden') window.destroy() root = Tk() def on_closing(): #self.global_close(root) print('Beenden') root.destroy() root.protocol("WM_DELETE_WINDOW", on_closing) app = App(root) root.mainloop() #root.destroy() # optional;