# HG changeset patch # User Laman # Date 2018-12-08 16:30:50 # Node ID 18d23ce9a53f42326a1b163c36800a368979d0fc # Parent 5a1d87ee0f8ae36bd0fb98e898e67b3758ec05b1 settings: setting and getting parameters entering setup state closing on setRecording diff --git a/src/core.py b/src/core.py --- a/src/core.py +++ b/src/core.py @@ -41,7 +41,7 @@ class Core: def setTresholds(self,tresB=None,tresW=None): if tresB is not None: self.detector.tresB=tresB if tresW is not None: self.detector.tresW=tresW - self.analyze() + self.preview() def relativeFrame(self,step): self._imgIndex=(self._imgIndex+step)%len(self._imgs) @@ -50,6 +50,17 @@ class Core: self._guiMessages.send("setCurrentFrame",(self._frame.copy(),gui.PREVIEW)) self.preview() + def sendParams(self): + params={ + "tresB": self.detector.tresB, + "tresW": self.detector.tresW + } + self._guiMessages.send("setParams",tuple(),params) + + def setParams(self,tresB=0,tresW=0): + self.detector.tresB=tresB + self.detector.tresW=tresW + def preview(self): if self.detector.analyze(self._frame): self._guiMessages.send("setGameState", (self.detector.board,[])) @@ -83,7 +94,9 @@ class Core: "setCorners": self.setCorners, "setTresholds": self.setTresholds, "prevFrame": lambda: self.relativeFrame(-1), - "nextFrame": lambda: self.relativeFrame(1) + "nextFrame": lambda: self.relativeFrame(1), + "fetchParams": self.sendParams, + "setParams": self.setParams } (actionName,args,kwargs)=e diff --git a/src/gui/__init__.py b/src/gui/__init__.py --- a/src/gui/__init__.py +++ b/src/gui/__init__.py @@ -1,4 +1,5 @@ -import threading +import logging +import threading import tkinter as tk import config @@ -6,6 +7,8 @@ from .mainwindow import MainWindow from .boardview import BoardView from .settings import Settings +log=logging.getLogger(__name__) + class GUI: SETUP=PREVIEW=0 @@ -22,6 +25,7 @@ class GUI: self._state=GUI.SETUP self.mainWindow = MainWindow(self, master=self.root) + self.settings=None self.root.columnconfigure(0,weight=1) self.root.rowconfigure(0,weight=1) @@ -54,9 +58,16 @@ class GUI: self.mainWindow.setRecording() self.root.bind("",lambda e: None) self.root.bind("",lambda e: None) + if self.settings: + self.settings.destroy() + self.settings=None def _handleEvent(self,e): - actions={"setCurrentFrame":self._frameHandler, "setGameState":self._stateHandler} + actions={ + "setCurrentFrame": self._frameHandler, + "setGameState": self._stateHandler, + "setParams": self._paramsHandler + } (actionName,args,kwargs)=e return actions[actionName](*args,**kwargs) @@ -70,6 +81,13 @@ class GUI: labels={(row,col):(i+1) for (i,(c,row,col)) in enumerate(moves)} self.mainWindow.boardView.redrawState(gameState,labels) + def _paramsHandler(self,**params): + if not self.settings: + log.warning("received 'setParams' message while settings is '%s'",str(self.settings)) + return + self.settings.setParams(**params) + + gui=GUI() """ diff --git a/src/gui/settings.py b/src/gui/settings.py --- a/src/gui/settings.py +++ b/src/gui/settings.py @@ -1,5 +1,5 @@ import tkinter as tk -from tkinter import N,S,E,W +from tkinter import N,S,E,W,LEFT from .util import MsgMixin @@ -17,12 +17,13 @@ class Settings(tk.Toplevel,MsgMixin): self.content.grid(column=0,row=0,sticky=(N,S,E,W)) self.content.columnconfigure(0,weight=1) self._create() + self.parent.settings=self + self.parent.root.event_generate("<>") + self.parent.sendMsg("fetchParams") def _create(self): self.scaleTresB=tk.Scale(self.content, orient=tk.HORIZONTAL, length=200, from_=0.0, to=100.0, command=self.refreshTresholds) self.scaleTresW=tk.Scale(self.content, orient=tk.HORIZONTAL, length=200, from_=0.0, to=100.0, command=self.refreshTresholds) - self.scaleTresB.set(30.0) # !! proper defaults - self.scaleTresW.set(60.0) blackLabel=tk.Label(self.content,text="Black stone treshold (intensity)") whiteLabel=tk.Label(self.content,text="White stone treshold (intensity)") @@ -31,5 +32,27 @@ class Settings(tk.Toplevel,MsgMixin): whiteLabel.grid(column=0,row=2) self.scaleTresW.grid(column=0,row=3,sticky=(E,W)) + self.buttonFrame=tk.Frame(self.content) + self.buttonFrame.grid(column=0,row=4,sticky=(W,)) + self.confirmButton=tk.Button(self.buttonFrame,text="OK",command=self.sendParams) + self.cancelButton=tk.Button(self.buttonFrame,text="Cancel",command=lambda: self.destroy()) + self.confirmButton.pack(side=LEFT) + self.cancelButton.pack(side=LEFT) + def refreshTresholds(self,_): - self.parent.sendMsg("setTresholds",tuple(),{"tresB":self.scaleTresB.get(), "tresW":self.scaleTresW.get()}) + self.parent.sendMsg("setTresholds",tuple(),self._compileParams()) + + def setParams(self,tresB=0,tresW=0): + self.scaleTresB.set(tresB) + self.scaleTresW.set(tresW) + + def sendParams(self): + self.parent.sendMsg("setParams",tuple(),self._compileParams()) + self.destroy() + + def _compileParams(self): + params={ + "tresB": self.scaleTresB.get(), + "tresW": self.scaleTresW.get() + } + return params