瀏覽代碼

Add figures to the GUI

Yentl Van Tendeloo 8 年之前
父節點
當前提交
a2d87c8593

二進制
interface/CBD/figures/constant.png


二進制
interface/CBD/figures/delay.png


二進制
interface/CBD/figures/derivative.png


二進制
interface/CBD/figures/integrator.png


二進制
interface/CBD/figures/inverse.png


二進制
interface/CBD/figures/multiply.png


二進制
interface/CBD/figures/negation.png


二進制
interface/CBD/figures/probe.png


二進制
interface/CBD/figures/summation.png


+ 44 - 15
interface/CBD/main.py

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