Adds play/pause button

This commit is contained in:
LSaldyt
2017-10-21 14:12:42 -07:00
parent 0d972a6776
commit aa218988fd
4 changed files with 53 additions and 18 deletions

View File

@ -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
View 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):

View File

@ -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)

View File

@ -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)