Adds play/pause button
This commit is contained in:
@ -34,26 +34,33 @@ class Copycat(object):
|
||||
self.reporter = reporter or Reporter()
|
||||
self.showgui = showgui
|
||||
self.gui = GUI('Copycat')
|
||||
self.lastUpdate = float('-inf')
|
||||
|
||||
def mainLoop(self, lastUpdate):
|
||||
def step(self):
|
||||
if (not self.showgui) or (self.showgui and not self.gui.app.primary.control.paused):
|
||||
self.coderack.chooseAndRunCodelet()
|
||||
self.reporter.report_coderack(self.coderack)
|
||||
self.reporter.report_temperature(self.temperature)
|
||||
self.reporter.report_workspace(self.workspace)
|
||||
|
||||
def update_workspace(self, currentTime):
|
||||
self.workspace.updateEverything()
|
||||
self.coderack.updateCodelets()
|
||||
self.slipnet.update(self.random)
|
||||
self.temperature.update(self.workspace.getUpdatedTemperature())
|
||||
self.lastUpdate = currentTime
|
||||
self.reporter.report_slipnet(self.slipnet)
|
||||
|
||||
def mainLoop(self):
|
||||
currentTime = self.coderack.codeletsRun
|
||||
self.temperature.tryUnclamp(currentTime)
|
||||
# Every 15 codelets, we update the workspace.
|
||||
if currentTime >= lastUpdate + 15:
|
||||
self.workspace.updateEverything()
|
||||
self.coderack.updateCodelets()
|
||||
self.slipnet.update(self.random)
|
||||
self.temperature.update(self.workspace.getUpdatedTemperature())
|
||||
lastUpdate = currentTime
|
||||
self.reporter.report_slipnet(self.slipnet)
|
||||
self.coderack.chooseAndRunCodelet()
|
||||
self.reporter.report_coderack(self.coderack)
|
||||
self.reporter.report_temperature(self.temperature)
|
||||
self.reporter.report_workspace(self.workspace)
|
||||
if currentTime >= self.lastUpdate + 15:
|
||||
self.update_workspace(currentTime)
|
||||
self.step()
|
||||
|
||||
if self.showgui:
|
||||
self.gui.update(self)
|
||||
return lastUpdate
|
||||
|
||||
def runTrial(self):
|
||||
"""Run a trial of the copycat algorithm"""
|
||||
@ -61,9 +68,8 @@ class Copycat(object):
|
||||
self.slipnet.reset()
|
||||
self.temperature.reset()
|
||||
self.workspace.reset()
|
||||
lastUpdate = float('-inf')
|
||||
while self.workspace.finalAnswer is None:
|
||||
lastUpdate = self.mainLoop(lastUpdate)
|
||||
self.mainLoop()
|
||||
answer = {
|
||||
'answer': self.workspace.finalAnswer,
|
||||
'temp': self.temperature.last_unclamped_value,
|
||||
|
||||
22
copycat/gui/control.py
Normal file
22
copycat/gui/control.py
Normal file
@ -0,0 +1,22 @@
|
||||
import tkinter as tk
|
||||
import tkinter.ttk as ttk
|
||||
|
||||
class Control(ttk.Frame):
|
||||
def __init__(self, parent, *args, **kwargs):
|
||||
tk.Frame.__init__(self, parent, *args, **kwargs)
|
||||
|
||||
self.paused = True
|
||||
|
||||
#self.style = ttk.Style()
|
||||
#self.style.configure('TButton', background='black', foreground='white')
|
||||
|
||||
#self.playbutton = ttk.Button(self, text='Play/Pause', command=lambda : self.play())
|
||||
self.playbutton = tk.Button(self, text='Play', command=lambda : self.toggle(), background='black', foreground='white', activebackground='black', activeforeground='blue')
|
||||
self.playbutton.grid(column=0, row=0, stick=tk.N+tk.E+tk.S+tk.W)
|
||||
self.rowconfigure(0, weight=1)
|
||||
self.columnconfigure(0, weight=1)
|
||||
|
||||
def toggle(self):
|
||||
self.paused = not self.paused
|
||||
self.playbutton['text'] = 'Pause' if not self.paused else 'Play'
|
||||
#def step(self):
|
||||
@ -4,6 +4,8 @@ import tkinter.ttk as ttk
|
||||
from tkinter import scrolledtext
|
||||
from tkinter import filedialog
|
||||
|
||||
from .control import Control
|
||||
|
||||
font1Size = 32
|
||||
font2Size = 16
|
||||
font1 = ('Helvetica', str(font1Size))
|
||||
@ -47,12 +49,17 @@ class Primary(ttk.Frame):
|
||||
ttk.Frame.__init__(self, parent, *args, **kwargs)
|
||||
|
||||
self.canvas = create_main_canvas(self, 'abc', 'abd', 'ijk', '?')
|
||||
self.canvas.grid(column=0, row=0, sticky=tk.N+tk.S+tk.E+tk.W)
|
||||
self.canvas.grid(column=0, row=0, rowspan=2, sticky=tk.N+tk.S+tk.E+tk.W)
|
||||
|
||||
self.rowconfigure(0, weight=1)
|
||||
self.columnconfigure(0, weight=1)
|
||||
|
||||
self.control = Control(self)
|
||||
self.control.grid(column=0, row=2, sticky=tk.N+tk.S+tk.E+tk.W)
|
||||
self.rowconfigure(0, weight=1)
|
||||
self.columnconfigure(2, weight=1)
|
||||
|
||||
def update(self, copycat):
|
||||
answer = '' if copycat.workspace.rule is None else copycat.workspace.rule.buildTranslatedRule()
|
||||
self.canvas = create_main_canvas(self, 'abc', 'abd', 'ijk', answer)
|
||||
self.canvas.grid(column=0, row=0, sticky=tk.N+tk.S+tk.E+tk.W)
|
||||
self.canvas.grid(column=0, row=0, rowspan=2, sticky=tk.N+tk.S+tk.E+tk.W)
|
||||
|
||||
@ -17,9 +17,9 @@ plt.style.use('dark_background')
|
||||
|
||||
class StatusFrame(tk.Frame):
|
||||
def __init__(self, parent, status, title, toolbar=False):
|
||||
tk.Frame.__init__(self, parent)
|
||||
self.status = status
|
||||
|
||||
tk.Frame.__init__(self, parent)
|
||||
self.canvas = FigureCanvasTkAgg(status.figure, self)
|
||||
self.canvas.show()
|
||||
self.canvas.get_tk_widget().pack(side=tk.BOTTOM, fill=tk.BOTH, expand=True)
|
||||
|
||||
Reference in New Issue
Block a user