Changeset - 18d23ce9a53f
[Not reviewed]
default
0 3 0
Laman - 6 years ago 2018-12-08 16:30:50

settings:
setting and getting parameters
entering setup state
closing on setRecording
3 files changed with 62 insertions and 8 deletions:
0 comments (0 inline, 0 general)
src/core.py
Show inline comments
 
@@ -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
 

	
src/gui/__init__.py
Show inline comments
 
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("<Left>",lambda e: None)
 
		self.root.bind("<Right>",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()
 

	
 
"""
src/gui/settings.py
Show inline comments
 
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("<<setUp>>")
 
		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
0 comments (0 inline, 0 general)