# HG changeset patch # User Laman # Date 2017-04-08 11:42:05 # Node ID 4c1ba49ea8592d73f26d91a053a6d921555e9c19 # Parent f85a79f2fd95b445b2ddc5568b81f8c43eef73d2 walking through the frames diff --git a/src/config.py b/src/config.py --- a/src/config.py +++ b/src/config.py @@ -10,7 +10,7 @@ with open(os.path.join(os.path.dirname(_ class misc: file=cfgFile["misc"] version=(0,0,0) - defaultImage=file.get("defaultImage", "1.jpg") + defaultImage=file.get("defaultImage", 0) class gui: file=cfgFile["gui"] diff --git a/src/core.py b/src/core.py --- a/src/core.py +++ b/src/core.py @@ -19,12 +19,15 @@ class Core: self._ownMessages=MsgQueue(self._handleEvent) self._guiMessages=MsgQueue() - imgPath=os.path.join(os.path.dirname(__file__), "..","images",cfg.misc.defaultImage) + self._imgDir=os.path.join(os.path.dirname(__file__), "..","images") + self._imgs=sorted(os.listdir(self._imgDir)) + self._imgIndex=cfg.misc.defaultImage + imgPath=os.path.join(self._imgDir,self._imgs[self._imgIndex]) self._frame=PIL.Image.open(imgPath) self._guiProc=multiprocessing.Process(name="gui", target=gui, args=(self._guiMessages,self._ownMessages)) self._guiProc.start() - self._guiMessages.send("setCurrentFrame",(self._frame.copy(),)) + self.relativeFrame(0) def setCorners(self,corners): self.detector.setGridCorners(corners) @@ -37,6 +40,12 @@ class Core: if self.detector.analyze(self._frame): self._guiMessages.send("setGameState",(self.detector.board,)) + def relativeFrame(self,step): + self._imgIndex=(self._imgIndex+step)%len(self._imgs) + imgPath=os.path.join(self._imgDir,self._imgs[self._imgIndex]) + self._frame=PIL.Image.open(imgPath) + self._guiMessages.send("setCurrentFrame",(self._frame.copy(),)) + def listen(self): listenerThread=threading.Thread(target=lambda: self._ownMessages.listen()) listenerThread.start() @@ -46,7 +55,12 @@ class Core: self._ownMessages.send("!kill") def _handleEvent(self,e): - actions={"setCorners":self.setCorners, "setTresholds":self.setTresholds} + actions={ + "setCorners": self.setCorners, + "setTresholds": self.setTresholds, + "prevFrame": lambda: self.relativeFrame(-1), + "nextFrame": lambda: self.relativeFrame(1) + } (actionName,args,kwargs)=e return actions[actionName](*args,**kwargs) diff --git a/src/gui/__init__.py b/src/gui/__init__.py --- a/src/gui/__init__.py +++ b/src/gui/__init__.py @@ -18,7 +18,8 @@ class GUI: self.root.rowconfigure(0,weight=1) self.root.bind("<>", lambda e: self.mainWindow.redrawImgView()) - self.root.bind("<>", lambda e: print("fired receiveState")) + self.root.bind("",lambda e: self.sendMsg("prevFrame")) + self.root.bind("",lambda e: self.sendMsg("nextFrame")) def __call__(self,ownMessages,coreMessages): self._coreMessages=coreMessages diff --git a/src/gui/imgview.py b/src/gui/imgview.py --- a/src/gui/imgview.py +++ b/src/gui/imgview.py @@ -31,7 +31,7 @@ class ImgView(ResizableCanvas): if self._img: img=self._img.copy() img.thumbnail((int(self._width),int(self._height))) - self._tkImg=ImageTk.PhotoImage(img) # just to save the image from the garbage collector + self._tkImg=ImageTk.PhotoImage(img) # just to save the image from garbage collector self.create_image(self._width//2, self._height//2, anchor="center", image=self._tkImg) for corner in self._corners.corners: @@ -62,7 +62,6 @@ class ImgView(ResizableCanvas): self._imgSizeCoef=max(widthRatio,heightRatio) self._img=img - self.configure(width=wo,height=ho) ## Stores a grid corner located at x,y coordinates. def addCorner(self,x,y): diff --git a/src/gui/mainwindow.py b/src/gui/mainwindow.py --- a/src/gui/mainwindow.py +++ b/src/gui/mainwindow.py @@ -13,6 +13,9 @@ class MainWindow(tk.Frame): self.grid(column=0,row=0,sticky=(N,S,E,W)) self._createWidgets() + self.bind("",lambda e: self.sendMsg("prevFrame")) + self.bind("",lambda e: self.sendMsg("nextFrame")) + def setCurrentFrame(self,frame): self.imgView.setImg(frame)