|
@@ -3,7 +3,9 @@ matplotlib.use("TkAgg")
|
|
|
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
|
|
|
from matplotlib.figure import Figure
|
|
|
|
|
|
+
|
|
|
from Tkinter import *
|
|
|
+from PIL import Image, ImageTk
|
|
|
import tkSimpleDialog
|
|
|
|
|
|
import urllib
|
|
@@ -175,8 +177,8 @@ class InterfaceCore():
|
|
|
drawn = set()
|
|
|
refs = dict()
|
|
|
|
|
|
- mv = MvLayer(address)
|
|
|
- #mv = FakeLayer(address)
|
|
|
+ #mv = MvLayer(address)
|
|
|
+ mv = FakeLayer(address)
|
|
|
|
|
|
def set_mode(self, mode):
|
|
|
self.mode = mode
|
|
@@ -223,7 +225,7 @@ class InterfaceCore():
|
|
|
y = event.y
|
|
|
self.mv.instantiate_block(str(name), self.mode)
|
|
|
r = canvas.create_rectangle(lower(x), lower(y), upper(x), upper(y), fill="white")
|
|
|
- t = canvas.create_text(avg(lower(x), upper(x)), avg(lower(y), upper(y)), text=self.mode, fill="black")
|
|
|
+ t = canvas.create_image(avg(lower(x), upper(x)), avg(lower(y), upper(y)), image=photos[self.mode], fill="black")
|
|
|
b = (lower(x), lower(y), upper(x), upper(y), str(name))
|
|
|
self.drawn.add(b)
|
|
|
self.refs[str(name)] = [r, t]
|
|
@@ -312,25 +314,52 @@ def integrator():
|
|
|
def delete(event):
|
|
|
core.delete(event.x, event.y)
|
|
|
|
|
|
-def make_probe():
|
|
|
+def probe():
|
|
|
core.set_mode("ProbeBlock")
|
|
|
|
|
|
-buttons = [
|
|
|
- Button(root, text="+", command=addition, bg="red"),
|
|
|
- Button(root, text="-x", command=negation, bg="red"),
|
|
|
- Button(root, text="*", command=multiply, bg="red"),
|
|
|
- Button(root, text="1/x", command=inverse, bg="red"),
|
|
|
- Button(root, text="Constant", command=constant, bg="red"),
|
|
|
- Button(root, text="Delay", command=delay, bg="red"),
|
|
|
- Button(root, text="d/dx", command=derivator, bg="red"),
|
|
|
- Button(root, text="integrator", command=integrator, bg="red"),
|
|
|
- Button(root, text="Probe", command=make_probe, bg="red"),
|
|
|
+images = {
|
|
|
+ "ConstantBlock": Image.open("figures/constant.png"),
|
|
|
+ "AdditionBlock": Image.open("figures/summation.png"),
|
|
|
+ "NegatorBlock": Image.open("figures/negation.png"),
|
|
|
+ "MultiplyBlock": Image.open("figures/multiply.png"),
|
|
|
+ "InverseBlock": Image.open("figures/inverse.png"),
|
|
|
+ "DerivativeBlock": Image.open("figures/derivative.png"),
|
|
|
+ "IntegratorBlock": Image.open("figures/integrator.png"),
|
|
|
+ "DelayBlock": Image.open("figures/delay.png"),
|
|
|
+ "ProbeBlock": Image.open("figures/probe.png"),
|
|
|
+ }
|
|
|
+
|
|
|
+hsize = 30
|
|
|
+for k, v in images.items():
|
|
|
+ old_vsize, old_hsize = v.size
|
|
|
+ vsize = int(old_vsize * hsize / float(old_hsize))
|
|
|
+ images[k] = v.resize((vsize, hsize), Image.ANTIALIAS)
|
|
|
+
|
|
|
+photos = {k: ImageTk.PhotoImage(v) for k, v in images.items()}
|
|
|
+
|
|
|
+bound_functions = {
|
|
|
+ "ConstantBlock": constant,
|
|
|
+ "AdditionBlock": addition,
|
|
|
+ "MultiplyBlock": multiply,
|
|
|
+ "NegatorBlock": negation,
|
|
|
+ "InverseBlock": inverse,
|
|
|
+ "DerivativeBlock": derivator,
|
|
|
+ "IntegratorBlock": integrator,
|
|
|
+ "DelayBlock": delay,
|
|
|
+ "ProbeBlock": probe,
|
|
|
+}
|
|
|
+
|
|
|
+buttons = []
|
|
|
+for k, v in bound_functions.items():
|
|
|
+ buttons.append(Button(root, image=photos[k], command=v))
|
|
|
+
|
|
|
+buttons.extend([
|
|
|
Button(root, text="Link", command=link, bg="blue"),
|
|
|
Button(root, text="InitialCondition", command=ic, bg="blue"),
|
|
|
Button(root, text="SIM", command=simulate, bg="green"),
|
|
|
Button(root, text="STEP", command=step, bg="green"),
|
|
|
Button(root, text="PAUSE", command=pause, bg="green"),
|
|
|
- ]
|
|
|
+ ])
|
|
|
|
|
|
for i, b in enumerate(buttons):
|
|
|
b.grid(row=0, column=i)
|