diff --git a/Masterarbeit/UIController.py b/Masterarbeit/UIController.py index 96eed0a..9a6a2a3 100644 --- a/Masterarbeit/UIController.py +++ b/Masterarbeit/UIController.py @@ -7,7 +7,6 @@ from threading import Thread class Controller(): def __init__(self): - self.model = Modell(self) self.view = viewTkinter.View(self) self.commands = { @@ -23,8 +22,6 @@ class Controller(): "freeSpelling": "WorkingPage", "test": "WorkingPage" } - - self.view.mainloop() def actionPerformed(self, action): @@ -38,20 +35,44 @@ class Controller(): def test(self): - self.thread = Thread(target=self.model.trainXDawn) - self.thread.start() - #self.model.trainXDawn() + self.model = Modell(self) + self.model.setFunktion(self.model.trainXDawn) + self.model.start() + #wird durch Btn gestartet -> startet copyspelling als thread def commandoCopySpelling(self): - self.model.startCopySpelling() - self.model.trainXDawn() - self.model.rainClassifier() + self.model = Modell(self) + self.model.setFunktion(self.model.startCopySpelling) + self.model.start() + + #wird durch Copy-Speller Thread copystelling gestartet -> startete filtern als thread + def filterXdawn(self): + #self.setTitle("start training Xdawn") + #self.setInfos("start training Xdawn") + self.model = Modell(self) + self.model.setFunktion(self.model.trainXDawn) + self.model.start() + + #wird durch XDawn-Thread copystelling gestartet -> startete filtern als thread + def filterClassic(self): + self.model = Modell(self) + self.model.setFunktion(self.model.trainClassifier) + self.model.start() def commandFreeSpelling(self): self.model.freeSpelling() def commandStop(self): + self.model.stop() + self.model.join() self.model.killProzess() - self.thread.join() + self.mode = None + + def setInfos(self,text): + self.view.setInfoText(text) + + def setTitle(self,text): + self.view.setTitleText(text) + diff --git a/Masterarbeit/UIController.pyc b/Masterarbeit/UIController.pyc index 002052e..99d4920 100644 Binary files a/Masterarbeit/UIController.pyc and b/Masterarbeit/UIController.pyc differ diff --git a/Masterarbeit/UIModell.py b/Masterarbeit/UIModell.py index 578d20c..06fa9cd 100644 --- a/Masterarbeit/UIModell.py +++ b/Masterarbeit/UIModell.py @@ -1,12 +1,33 @@ from subprocess import * -import os +from threading import Thread +import time -class Modell(): +class Modell(Thread): PATH_OV = 'meta/dist/designer-Release/openvibe-designer.sh' PATH_FILES = 'Projekte/OpenViBE_visual_BCI-master/openvibe_visual_bci/' - def __init__(self, c): + def __init__(self,c): + Thread.__init__(self) self.controller = c + self.aktiv= True + + def stop(self): + print("stop") + self.aktiv = False + + def setFunktion(self, func, args=None, kwargs=None): + self.func = func + self.args = args or [] + self.kwargs = kwargs or {} + + def run(self): + #self.aktiv = True + t = Thread(target=self.func, args=self.args, kwargs=self.kwargs) + t.setDaemon(True) + t.start() + + while self.aktiv: + time.sleep(0.1) def startCopySpelling(self): @@ -25,14 +46,18 @@ class Modell(): break self.killProzess() + self.controller.filterXdawn() def trainXDawn(self): print("start training Xdawn") + self.controller.setTitle("start training with Xdawn") + self.controller.setInfos("This may take a while") + print("test") path = self.PATH_FILES + 'p300-visual-2-train-xDAWN.xml' process = Popen(['bash', self.PATH_OV, '--play', path, '--no-gui'], stdout=PIPE, universal_newlines=True) - while True: + while self.aktiv: output = process.stdout.readline() print(output.strip()) x = output.find("Training finished and saved") @@ -41,7 +66,9 @@ class Modell(): process.terminate() break + self.controller.setInfos("finished Training with xDawn") self.killProzess() + #self.controller.filterClassic() def trainClassifier(self): diff --git a/Masterarbeit/UIModell.pyc b/Masterarbeit/UIModell.pyc index 897ee96..86d3687 100644 Binary files a/Masterarbeit/UIModell.pyc and b/Masterarbeit/UIModell.pyc differ diff --git a/Masterarbeit/UIViewTKinter.py b/Masterarbeit/UIViewTKinter.py index 167fff5..10be0a2 100644 --- a/Masterarbeit/UIViewTKinter.py +++ b/Masterarbeit/UIViewTKinter.py @@ -49,12 +49,15 @@ class View(Tk): def createTopFrame(self): self.topFrame = Frame(self, bg="blue", height=50, width=500) #, padx=460, pady=10) - l = Label(self.topFrame, text="taktilles Buchstabieren") + self.toplabel = Label(self.topFrame, text="taktilles Buchstabieren") + + self.topFrame.columnconfigure(0, weight=1) # Set weight to row and + self.topFrame.rowconfigure(0, weight=1) # column where the widget is self.topFrame.grid(column=0, row=0) self.topFrame.grid_propagate(0) self.topFrame.pack_propagate(0) - l.pack() + self.toplabel.grid() def createMainFrame(self): @@ -81,10 +84,14 @@ class View(Tk): self.bottomFrame.grid(column=0, row=2) self.bottomFrame.pack_propagate(0) - label = Label(self.bottomFrame, text="Hier stehen Infos") - label.pack() + self.bottomlabel = Label(self.bottomFrame, text="Hier stehen Infos") + self.bottomlabel.pack() + def setInfoText(self, text): + self.bottomlabel['text'] = text + def setTitleText(self,text): + self.toplabel['text'] = text class StartPage(Frame): def __init__(self, parent, controller): Frame.__init__(self, parent, height=250, width=500, bg="red") diff --git a/Masterarbeit/UIViewTKinter.pyc b/Masterarbeit/UIViewTKinter.pyc index ea3b650..af9f054 100644 Binary files a/Masterarbeit/UIViewTKinter.pyc and b/Masterarbeit/UIViewTKinter.pyc differ diff --git a/Masterarbeit/test.py b/Masterarbeit/test.py index 28c13cc..c139d2e 100644 --- a/Masterarbeit/test.py +++ b/Masterarbeit/test.py @@ -1,42 +1,22 @@ -from threading import Thread -import time -from itertools import count +try: + from Tkinter import * +except ImportError: + from tkinter import * -class Modell(Thread): - def __init__(self): - Thread.__init__(self) - self.running = True - - def stop(self): - self.running = False +root = Tk() +root.geometry('300x200') +root.columnconfigure(0, weight=1) # Set weight to row and +root.rowconfigure(0, weight=1) # column where the widget is - def setFunktion(self, func, args=None, kwargs=None): - self.func = func - self.args = args or [] - self.kwargs = kwargs or {} - - def run(self): - t = Thread(target=self.func, args=self.args, kwargs=self.kwargs) - t.setDaemon(True) - t.start() - - while self.running: - time.sleep(0.1) - +container = Frame(root, bg='tan') # bg color to show extent +container.grid(row=0, column=0) # Grid cell with weight - def worker(self): - i= 0 - while True: - i = i+1 - print(i) - time.sleep(0.05) - -c = Modell() -c.setFunktion(c.worker) -c.start() +# A couple of widgets to illustrate the principle. +b1 = Button(container, text='First', width=10) +b1.grid() +b2 = Button(container, text='second', width=10) +b2.grid() + +root.mainloop() -t = time.time() -time.sleep(3) - -c.stop()