Files
@ 5a1d87ee0f8a
Branch filter:
Location: OneEye/src/gui/__init__.py - annotation
5a1d87ee0f8a
2.7 KiB
text/x-python
splitting setup mode and recording mode
0d57edb8be11 0d57edb8be11 0d57edb8be11 0d57edb8be11 0d57edb8be11 0d57edb8be11 5f2136fcbebd 0d57edb8be11 0d57edb8be11 0d57edb8be11 5a1d87ee0f8a 5a1d87ee0f8a 5a1d87ee0f8a 0d57edb8be11 0d57edb8be11 0d57edb8be11 bc96e653888e 0d57edb8be11 8a0de753f06f 0d57edb8be11 0d57edb8be11 5a1d87ee0f8a 5a1d87ee0f8a 0d57edb8be11 0d57edb8be11 0d57edb8be11 0d57edb8be11 0d57edb8be11 5a1d87ee0f8a 5a1d87ee0f8a 5f2136fcbebd 8a0de753f06f 0d57edb8be11 5a1d87ee0f8a 5a1d87ee0f8a 0d57edb8be11 8a0de753f06f 0d57edb8be11 0d57edb8be11 0d57edb8be11 0d57edb8be11 0d57edb8be11 0d57edb8be11 0d57edb8be11 0d57edb8be11 0d57edb8be11 0d57edb8be11 5a1d87ee0f8a 5a1d87ee0f8a 5a1d87ee0f8a 5a1d87ee0f8a 5a1d87ee0f8a 5a1d87ee0f8a 5a1d87ee0f8a 5a1d87ee0f8a 5a1d87ee0f8a 5a1d87ee0f8a 0d57edb8be11 0d57edb8be11 0d57edb8be11 0d57edb8be11 0d57edb8be11 0d57edb8be11 5a1d87ee0f8a 5a1d87ee0f8a 0d57edb8be11 0d57edb8be11 0d57edb8be11 9ab11204b0f9 9ab11204b0f9 9ab11204b0f9 0d57edb8be11 0d57edb8be11 5a1d87ee0f8a 5a1d87ee0f8a 5a1d87ee0f8a 5a1d87ee0f8a 5a1d87ee0f8a 5a1d87ee0f8a 5a1d87ee0f8a 5a1d87ee0f8a 5a1d87ee0f8a 5a1d87ee0f8a 5a1d87ee0f8a 5a1d87ee0f8a 5a1d87ee0f8a 5a1d87ee0f8a 5a1d87ee0f8a | import threading
import tkinter as tk
import config
from .mainwindow import MainWindow
from .boardview import BoardView
from .settings import Settings
class GUI:
SETUP=PREVIEW=0
RECORDING=REAL=1
def __init__(self):
self.root = tk.Tk()
self.root.title("OneEye {0}.{1}.{2}".format(*config.misc.version))
self.root.option_add('*tearOff',False) # for menu
self._ownMessages=None
self._coreMessages=None
self._state=GUI.SETUP
self.mainWindow = MainWindow(self, master=self.root)
self.root.columnconfigure(0,weight=1)
self.root.rowconfigure(0,weight=1)
self.root.bind("<<redrawImgView>>", lambda e: self.mainWindow.redrawImgView())
self.root.bind("<<setUp>>", lambda e: self.setUp())
self.root.bind("<<setRecording>>", lambda e: self.setRecording())
self.root.bind("<F12>",lambda e: Settings(self))
self.mainWindow.bind("<Destroy>",lambda e: self._ownMessages.send("!kill",("gui",)))
self.setUp()
def __call__(self,ownMessages,coreMessages):
self._ownMessages=ownMessages
self._coreMessages=coreMessages
self.listenerThread=threading.Thread(target=lambda: ownMessages.listen(self._handleEvent))
self.listenerThread.start()
self.mainWindow.mainloop()
def sendMsg(self,actionName,args=tuple(),kwargs=None):
self._coreMessages.send(actionName,args,kwargs)
def setUp(self):
self.mainWindow.setUp()
self.root.bind("<Left>",lambda e: self.sendMsg("prevFrame"))
self.root.bind("<Right>",lambda e: self.sendMsg("nextFrame"))
def setRecording(self):
self.mainWindow.setRecording()
self.root.bind("<Left>",lambda e: None)
self.root.bind("<Right>",lambda e: None)
def _handleEvent(self,e):
actions={"setCurrentFrame":self._frameHandler, "setGameState":self._stateHandler}
(actionName,args,kwargs)=e
return actions[actionName](*args,**kwargs)
def _frameHandler(self,newFrame,type):
if self._state!=type: return
self.mainWindow.setCurrentFrame(newFrame)
self.root.event_generate("<<redrawImgView>>")
def _stateHandler(self,gameState,moves):
labels={(row,col):(i+1) for (i,(c,row,col)) in enumerate(moves)}
self.mainWindow.boardView.redrawState(gameState,labels)
gui=GUI()
"""
# setup #
* we can click around the ImgView
* we can walk through the frames back and forth
* BoardView is showing what the reading of ImgView _would_ be
* core is reading and analyzing frames, pushing results to StateBag, but not showing them
# recording #
* ImgView is showing the current picture, is not clickable
* BoardView is showing last detected position
* on switch to recording (if parameters have changed):
* feed analyzer new parameters and start using them
* in the background reanalyze cached frames with the new parameters and merge them into StateBag
"""
|