271 lines
9.0 KiB
Python
271 lines
9.0 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: UTF-8 -*-
|
|
#
|
|
# generated by wxGlade 1.0.2 on Sun Jul 4 21:23:20 2021
|
|
#
|
|
|
|
import importlib.machinery
|
|
import logging
|
|
from threading import Thread
|
|
import wx
|
|
|
|
# begin wxGlade: dependencies
|
|
# end wxGlade
|
|
|
|
# begin wxGlade: extracode
|
|
# end wxGlade
|
|
import matplotlib.cm as cm
|
|
import matplotlib.cbook as cbook
|
|
from matplotlib.backends.backend_wxagg import (
|
|
FigureCanvasWxAgg as FigureCanvas,
|
|
NavigationToolbar2WxAgg as NavigationToolbar,
|
|
)
|
|
from matplotlib.figure import Figure
|
|
|
|
from CoreLibrary.Param_Model import Param_Model
|
|
#from plotView import PlotPanel
|
|
from plotView import PlotPanel
|
|
|
|
LOGGER = logging.getLogger("myLogger")
|
|
|
|
# begin wxGlade: dependencies
|
|
# end wxGlade
|
|
|
|
# begin wxGlade: extracode
|
|
# end wxGlade
|
|
|
|
|
|
class MyFrame(wx.Frame):
|
|
def __init__(self, *args, **kwds):
|
|
|
|
self.model = Param_Model()
|
|
self.pd = self.model.get_plot_data()
|
|
|
|
# begin wxGlade: MyFrame.__init__
|
|
kwds["style"] = kwds.get("style", 0) | wx.DEFAULT_FRAME_STYLE
|
|
wx.Frame.__init__(self, *args, **kwds)
|
|
self.SetSize((1920, 1080))
|
|
self.SetTitle("My Fancy Measurements :D")
|
|
|
|
# Menu Bar
|
|
self.frame_menubar = wx.MenuBar()
|
|
tmp_menu = wx.Menu()
|
|
item = tmp_menu.Append(wx.ID_ANY, "Quit", "")
|
|
self.Bind(wx.EVT_MENU, self.on_close_window, item)
|
|
self.frame_menubar.Append(tmp_menu, "File")
|
|
self.SetMenuBar(self.frame_menubar)
|
|
# Menu Bar end
|
|
|
|
self.frame_statusbar = self.CreateStatusBar(1)
|
|
self.frame_statusbar.SetStatusWidths([-1])
|
|
# statusbar fields
|
|
frame_statusbar_fields = ["frame_statusbar"]
|
|
for i in range(len(frame_statusbar_fields)):
|
|
self.frame_statusbar.SetStatusText(frame_statusbar_fields[i], i)
|
|
|
|
# Tool Bar
|
|
self.frame_toolbar = wx.ToolBar(self, -1)
|
|
self.SetToolBar(self.frame_toolbar)
|
|
self.frame_toolbar.Realize()
|
|
# Tool Bar end
|
|
|
|
self.panel_1 = wx.Panel(self, wx.ID_ANY)
|
|
|
|
grid_sizer_main = wx.GridBagSizer(0, 0)
|
|
|
|
sizer_status = wx.GridBagSizer(vgap=5, hgap=5)
|
|
grid_sizer_main.Add(sizer_status, (0, 0), (2, 1), wx.EXPAND, 0)
|
|
|
|
# TODO test
|
|
data = {"over1":False,"over2":True,"motor":123}
|
|
self.status={}
|
|
self.green = wx.Bitmap("./img/green.bmp")
|
|
self.red = wx.Bitmap("./img/red.bmp")
|
|
row = 0
|
|
for key, val in data.items():
|
|
label = wx.StaticText(self.panel_1, wx.ID_ANY, key)
|
|
sizer_status.Add(label, (row,0))
|
|
if type(val) is bool:
|
|
if val:
|
|
icon = wx.StaticBitmap(self.panel_1,bitmap=self.green)
|
|
self.status[key] = icon
|
|
sizer_status.Add(icon, (row,1))
|
|
else:
|
|
icon = wx.StaticBitmap(self.panel_1,bitmap=self.red)
|
|
self.status[key] = icon
|
|
sizer_status.Add(icon, (row,1))
|
|
else:
|
|
label = wx.StaticText(self.panel_1, wx.ID_ANY, str(val))
|
|
self.status[key] = label
|
|
sizer_status.Add(label, (row,1))
|
|
row +=1
|
|
|
|
self.tabs = wx.Notebook(self.panel_1, wx.ID_ANY)
|
|
grid_sizer_main.Add(self.tabs, (0, 1), (1, 1), wx.EXPAND, 0)
|
|
|
|
plot = lambda ax, dat: ax.plot(dat["time"], dat["mess1"])
|
|
update = lambda im, dat: im.set_data(dat["time"], dat["mess1"])
|
|
self.plot_1 = PlotPanel(self.tabs, self.pd, plot, update)
|
|
self.tabs.AddPage(self.plot_1, "Temp")
|
|
|
|
plot = lambda ax, dat: ax.plot(dat["time"], dat["mess1"])
|
|
update = lambda im, dat: im.set_data(dat["time"], dat["mess1"])
|
|
self.plot_2 = PlotPanel(self.tabs, self.pd, plot, update)
|
|
self.tabs.AddPage(self.plot_2, "Multi")
|
|
|
|
|
|
|
|
grid_sizer_3 = wx.GridBagSizer(10, 0)
|
|
grid_sizer_main.Add(grid_sizer_3, (0, 2), (2, 1), wx.EXPAND, 0)
|
|
|
|
grid_sizer_measurement = wx.GridBagSizer(0, 0)
|
|
grid_sizer_3.Add(grid_sizer_measurement, (0, 0), (1, 1), wx.EXPAND, 0)
|
|
|
|
self.b_start = wx.Button(self.panel_1, wx.ID_ANY, "Start")
|
|
grid_sizer_measurement.Add(self.b_start, (0, 0), (1, 1), 0, 0)
|
|
|
|
self.b_stop = wx.Button(self.panel_1, wx.ID_ANY, "Stop")
|
|
grid_sizer_measurement.Add(self.b_stop, (1, 0), (1, 1), 0, 0)
|
|
|
|
self.b_run = wx.Button(self.panel_1, wx.ID_ANY, "Run")
|
|
grid_sizer_measurement.Add(self.b_run, (2, 0), (1, 1), 0, 0)
|
|
|
|
grid_sizer_5 = wx.GridBagSizer(0, 0)
|
|
grid_sizer_3.Add(grid_sizer_5, (1, 0), (1, 1), wx.EXPAND, 0)
|
|
|
|
self.button_7 = wx.Button(self.panel_1, wx.ID_ANY, "button_7")
|
|
grid_sizer_5.Add(self.button_7, (0, 0), (1, 1), 0, 0)
|
|
|
|
self.button_8 = wx.Button(self.panel_1, wx.ID_ANY, "button_8")
|
|
grid_sizer_5.Add(self.button_8, (1, 0), (1, 1), 0, 0)
|
|
|
|
self.button_9 = wx.Button(self.panel_1, wx.ID_ANY, "button_9")
|
|
grid_sizer_5.Add(self.button_9, (2, 0), (1, 1), 0, 0)
|
|
|
|
grid_sizer_ctrl_plot = wx.GridBagSizer(0, 0)
|
|
grid_sizer_main.Add(grid_sizer_ctrl_plot, (1, 1), (1, 1), wx.EXPAND, 0)
|
|
|
|
self.b_clear = wx.Button(self.panel_1, wx.ID_ANY, "Clear")
|
|
grid_sizer_ctrl_plot.Add(self.b_clear, (0, 0), (1, 1), 0, 0)
|
|
|
|
self.b_save = wx.Button(self.panel_1, wx.ID_ANY, "Save")
|
|
grid_sizer_ctrl_plot.Add(self.b_save, (0, 1), (1, 1), 0, 0)
|
|
|
|
self.panel_1.SetSizer(grid_sizer_main)
|
|
|
|
self.Layout()
|
|
# end wxGlade
|
|
self.timer = wx.Timer(self, wx.ID_ANY)
|
|
self.Bind(wx.EVT_CLOSE, self.on_close_window)
|
|
self.Bind(wx.EVT_BUTTON, self.on_b_start, self.b_start)
|
|
self.Bind(wx.EVT_BUTTON, self.on_b_stop, self.b_stop)
|
|
self.Bind(wx.EVT_BUTTON, self.on_b_clear, self.b_clear)
|
|
self.Bind(wx.EVT_BUTTON, self.on_b_save, self.b_save)
|
|
self.Bind(wx.EVT_BUTTON, self.on_b_run, self.b_run)
|
|
self.Bind(wx.EVT_TIMER, self.update, self.timer)
|
|
self.timer.Start(100, False)
|
|
self.runner_thread = None
|
|
|
|
def on_close_window(self, event):
|
|
self.model.exit()
|
|
LOGGER.info("Closing")
|
|
wx.Exit()
|
|
|
|
def update(self, event):
|
|
#Repaint gui
|
|
self.tabs.Refresh()
|
|
self.model.refresh()
|
|
#Unlock if script is finished
|
|
if self.runner_thread is not None:
|
|
if not self.runner_thread.is_alive():
|
|
self.unlock()
|
|
self.runner_thread = None
|
|
#update Stuff
|
|
data = {"over1":True,"over2":True,"motor":12}
|
|
for key,val in data.items():
|
|
if type(val) is bool:
|
|
if val:
|
|
self.status[key].SetBitmap(self.green)
|
|
else:
|
|
self.status[key].SetBitmap(self.red)
|
|
else:
|
|
self.status[key].SetLabel(str(val))
|
|
|
|
def lock(self):
|
|
self.b_run.Disable()
|
|
self.b_start.Disable()
|
|
|
|
def unlock(self):
|
|
self.b_run.Enable()
|
|
self.b_start.Enable()
|
|
|
|
def on_b_start(self, event): # wxGlade: MyFrame.<event_handler>
|
|
LOGGER.info("Event handler 'on_b_start'")
|
|
self.model.start_measuring()
|
|
event.Skip()
|
|
|
|
def on_b_save(self, event): # wxGlade: MyFrame.<event_handler>
|
|
LOGGER.info("Event handler 'on_b_save'")
|
|
with wx.FileDialog(
|
|
self,
|
|
"Save csv file",
|
|
wildcard="CSV files (*.csv)|*.csv",
|
|
style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT,
|
|
) as fileDialog:
|
|
|
|
if fileDialog.ShowModal() == wx.ID_CANCEL:
|
|
return # the user changed their mind
|
|
|
|
# save the current contents in the file
|
|
pathname = fileDialog.GetPath()
|
|
self.model.save_measuring(path=pathname)
|
|
event.Skip()
|
|
|
|
def on_b_run(self, event): # wxGlade: MyFrame.<event_handler>
|
|
LOGGER.info("Event handler 'on_b_run'")
|
|
with wx.FileDialog(
|
|
self,
|
|
"Open PY file",
|
|
wildcard="PY files (*.py)|*.py",
|
|
style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST,
|
|
) as fileDialog:
|
|
|
|
if fileDialog.ShowModal() == wx.ID_CANCEL:
|
|
return # the user changed their mind
|
|
|
|
# Proceed loading the file chosen by the user
|
|
pathname = fileDialog.GetPath()
|
|
script = importlib.machinery.SourceFileLoader("ghf", pathname).load_module()
|
|
self.runner_thread = Thread(target=script.main, args=(self.model,))
|
|
self.lock()
|
|
self.runner_thread.start()
|
|
event.Skip()
|
|
|
|
def on_b_stop(self, event): # wxGlade: MyFrame.<event_handler>
|
|
self.model.stop_measuring()
|
|
LOGGER.info("Event handler 'on_b_stop'")
|
|
event.Skip()
|
|
|
|
def on_b_clear(self, event): # wxGlade: MyFrame.<event_handler>
|
|
self.model.clear()
|
|
LOGGER.info("Event handler 'on_b_clear'")
|
|
event.Skip()
|
|
|
|
|
|
# end of class MyFrame
|
|
|
|
|
|
class MyApp(wx.App):
|
|
def OnInit(self):
|
|
self.frame = MyFrame(None, wx.ID_ANY, "")
|
|
self.SetTopWindow(self.frame)
|
|
self.frame.Show()
|
|
return True
|
|
|
|
|
|
# end of class MyApp
|
|
|
|
if __name__ == "__main__":
|
|
app = MyApp(0)
|
|
app.MainLoop()
|