diff --git a/src/gui/__init__.py b/src/gui/__init__.py --- a/src/gui/__init__.py +++ b/src/gui/__init__.py @@ -4,6 +4,7 @@ import tkinter as tk import config from .mainwindow import MainWindow from .boardview import BoardView +from .settings import Settings class GUI: @@ -21,6 +22,7 @@ class GUI: self.root.bind("<>", lambda e: self.mainWindow.redrawImgView()) self.root.bind("",lambda e: self.sendMsg("prevFrame")) self.root.bind("",lambda e: self.sendMsg("nextFrame")) + self.root.bind("",lambda e: Settings(self)) def __call__(self,ownMessages,coreMessages): self._coreMessages=coreMessages diff --git a/src/gui/mainwindow.py b/src/gui/mainwindow.py --- a/src/gui/mainwindow.py +++ b/src/gui/mainwindow.py @@ -1,12 +1,13 @@ import tkinter as tk from tkinter import N,S,E,W -from . import menu +from .util import MsgMixin +from .menu import MainMenu from .boardview import BoardView from .imgview import ImgView -class MainWindow(tk.Frame): +class MainWindow(tk.Frame,MsgMixin): def __init__(self,parent,master=None): self.parent=parent @@ -14,17 +15,13 @@ 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) def _createWidgets(self): # menu self.parent.root.option_add('*tearOff',False) - menubar=menu.createTopBar(self.parent.root) - menu.createMainMenu(menubar) + self._menu=MainMenu(self.parent,self.parent.root) # a captured frame with overlay graphics self._imgWrapper=tk.Frame(self,width=480,height=360) @@ -37,14 +34,6 @@ class MainWindow(tk.Frame): self.boardView=BoardView(self._boardWrapper) self._boardWrapper.grid(column=1,row=0,sticky=(N,S,E,W)) - # more controls below the board - self.scaleTresB=tk.Scale(self, orient=tk.HORIZONTAL, length=200, from_=0.0, to=100.0, command=self.refreshTresholds) - self.scaleTresW=tk.Scale(self, 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) - self.scaleTresB.grid(column=0,row=1,columnspan=2) - self.scaleTresW.grid(column=0,row=2,columnspan=2) - self.columnconfigure(0,weight=1) self.columnconfigure(1,weight=1) self.rowconfigure(0,weight=1) @@ -55,9 +44,3 @@ class MainWindow(tk.Frame): ## Redraws the current image and its overlay. def redrawImgView(self): self.imgView.redraw() - - def refreshTresholds(self,_): - self.parent.sendMsg("setTresholds",tuple(),{"tresB":self.scaleTresB.get(), "tresW":self.scaleTresW.get()}) - - def sendMsg(self,actionName,args=tuple(),kwargs=None): - self.parent.sendMsg(actionName,args,kwargs) diff --git a/src/gui/menu.py b/src/gui/menu.py --- a/src/gui/menu.py +++ b/src/gui/menu.py @@ -1,18 +1,28 @@ -from tkinter import Menu - +import tkinter as tk -def createTopBar(root): - menubar = Menu(root) - root['menu'] = menubar - return menubar +from .util import MsgMixin +from .settings import Settings -def createMainMenu(menubar): - file = Menu(menubar) - _help = Menu(menubar) - menubar.add_cascade(menu=file, label='File') - menubar.add_cascade(menu=_help, label='Help') +class MainMenu(MsgMixin): + def __init__(self,parent,root): + self.root=root + self.parent=parent + self._createWidgets() + + def _createWidgets(self): + bar=self._createTopBar() - file.add_command(label="Settings") + file = tk.Menu(bar) + help_ = tk.Menu(bar) + bar.add_cascade(menu=file, label='File') + bar.add_cascade(menu=help_, label='Help') + + file.add_command(label="Settings",command=lambda: Settings(self.parent)) - _help.add_command(label="About") + help_.add_command(label="About") + + def _createTopBar(self): + menubar = tk.Menu(self.root) + self.root['menu'] = menubar + return menubar diff --git a/src/gui/settings.py b/src/gui/settings.py new file mode 100644 --- /dev/null +++ b/src/gui/settings.py @@ -0,0 +1,35 @@ +import tkinter as tk +from tkinter import N,S,E,W + +from .util import MsgMixin + + +class Settings(tk.Toplevel,MsgMixin): + def __init__(self,parent): + self.parent=parent + + tk.Toplevel.__init__(self, parent.root) + + self.title("Settings | OneEye") + + self.columnconfigure(0,weight=1) + self.content=tk.Frame(self) + self.content.grid(column=0,row=0,sticky=(N,S,E,W)) + self.content.columnconfigure(0,weight=1) + self._create() + + 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)") + blackLabel.grid(column=0,row=0) + self.scaleTresB.grid(column=0,row=1,sticky=(E,W)) + whiteLabel.grid(column=0,row=2) + self.scaleTresW.grid(column=0,row=3,sticky=(E,W)) + + def refreshTresholds(self,_): + self.parent.sendMsg("setTresholds",tuple(),{"tresB":self.scaleTresB.get(), "tresW":self.scaleTresW.get()}) diff --git a/src/gui/util.py b/src/gui/util.py new file mode 100644 --- /dev/null +++ b/src/gui/util.py @@ -0,0 +1,3 @@ +class MsgMixin: + def sendMsg(self,actionName,args=tuple(),kwargs=None): + self.parent.sendMsg(actionName,args,kwargs)