Minor UI and bug fixes

This commit is contained in:
Eric Yu 2022-08-12 00:33:27 -07:00
parent 6ad44be21c
commit 4bc34418bc
4 changed files with 26 additions and 119 deletions

View File

@ -1863,97 +1863,6 @@
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="gbsizeritem" expanded="0">
<property name="border">5</property>
<property name="colspan">1</property>
<property name="column">1</property>
<property name="flag">wxALL</property>
<property name="row">0</property>
<property name="rowspan">1</property>
<object class="wxButton" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default">0</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">0</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Plot</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">plot_but</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnButtonClick"></event>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="0">

View File

@ -4,7 +4,7 @@ import matplotlib
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import os, json, traceback, ui, wx
matplotlib.use("WXAgg")
matplotlib.use("WXAgg") # for JetBrains IDE to force use the wx backend
class SerialPlotter:
def __init__(self) -> None:
@ -35,10 +35,10 @@ class SerialPlotter:
wx.MessageBox(f"File has saved as {os.path.split(file)[1]} under {os.path.split(file)[0]} directory!\n")
def animation(self, t:int) -> None:
""" render a from of the animated graph """
# print("hi")
""" render a frame of the animated graph """
try:
plt.cla() # clear previous frame
# read the last line from the .csv file, the data start from the second colunm so omit index # 0
file = open(self.settings["file_name"], "r")
ndata = np.array([np.asarray(line.split(", ")[1:], dtype=np.float32) for line in file])
if len(ndata) > 0:
@ -64,7 +64,7 @@ class SerialPlotter:
except:
traceback.print_exc()
def plotting(self) -> None:
def plotting(self) -> FuncAnimation:
ani = FuncAnimation(self.fig, self.animation, blit=False)
return ani

38
test.py
View File

@ -1,5 +1,5 @@
from ui import Frame
from threading import *
from multiprocessing import *
from read_arduino import *
from serial_plotter import *
import os, json, wx, warnings
@ -11,7 +11,7 @@ warnings.filterwarnings("ignore", category=DeprecationWarning)
HEIGHT = 800
WIDTH = 800
global ani
global ani, t1
def main():
@ -39,7 +39,6 @@ def main():
raise ValueError(f"expecting 5 resistor values, but got {len(resistors)}!!!")
gen_settings(resistors, input_voltage, bit_rate, port, filename, window_size, delay)
return filename
def gen_settings(resistors, input_voltage, bits, port, filename, window_size, delay):
@ -68,34 +67,37 @@ def get_devices():
frame.dev_list.AppendItems(ports)
def runPlot(e):
global ani
def run(e):
"""
run the read_arduino.py and Serial Plotter in parallel
"""
global ani, t1 # the variables to call the plotter and the read_arduino.py, we want them to get tossed around between functions and even programs
main()
if 't1' in globals():
t1.terminate() # end the previous serial reads, if there is any
# place the read() function from read_arduino into another process to run it in background
t1 = Process(target=read, args=())
t1.start()
# run the plotter. Note that we should not put the plotter class, or function, in another process since
# matplot's FuncAnimation doesn't like that
plotter = SerialPlotter()
ani = plotter.plotting()
plotter.fig.show()
def run(e):
file = main()
t1 = Thread(target=read, args=())
t1.setDaemon(True)
t1.start()
runPlot(e)
frame.btLaunch.Enable(False)
frame.plot_but.Enable(True) # this might have some problem ... what happen if user spamming the plot button?
frame.btLaunch.SetLabelText("Plot") # change the text on the "launch" button to "plot"
if not frame.show_msg.GetValue():
frame.Hide()
if __name__ == '__main__':
global t1
app = wx.App()
frame = Frame(None)
get_devices()
frame.SetTitle("Cease your resistance! - alpha 0.1.1")
frame.btLaunch.Bind(wx.EVT_BUTTON, run)
frame.plot_but.Bind(wx.EVT_BUTTON,
runPlot) # There is one problem with this approch: what happen if user spamming the plot button?
if os.path.isfile("settings.json"):
print("Found existing settings.json, auto-fill previous inputs!")
settings = json.load(open('settings.json', 'r'))
@ -109,3 +111,5 @@ if __name__ == '__main__':
frame.Show()
app.MainLoop()
if 't1' in globals():
t1.terminate() # end the process if it has been started

8
ui.py
View File

@ -8,7 +8,6 @@
###########################################################################
import wx
import wx.xrc
###########################################################################
## Class Frame
@ -92,7 +91,7 @@ class Frame ( wx.Frame ):
self.sizer_prompt.Wrap( -1 )
gbSizer8.Add( self.sizer_prompt, wx.GBPosition( 2, 0 ), wx.GBSpan( 1, 1 ), wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT, 5 )
self.m_textCtrl26 = wx.TextCtrl( v_entre.GetStaticBox(), wx.ID_ANY, u"20", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_textCtrl26 = wx.TextCtrl( v_entre.GetStaticBox(), wx.ID_ANY, u"480", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_textCtrl26.SetToolTipString( u"Window size for the plot window. If want infinite/maximum size, type 0" )
gbSizer8.Add( self.m_textCtrl26, wx.GBPosition( 2, 1 ), wx.GBSpan( 1, 1 ), wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_CENTER_HORIZONTAL|wx.TOP|wx.RIGHT|wx.LEFT, 5 )
@ -137,11 +136,6 @@ class Frame ( wx.Frame ):
self.btLaunch.SetDefault()
launch_opt.Add( self.btLaunch, wx.GBPosition( 0, 0 ), wx.GBSpan( 1, 1 ), wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_CENTER_HORIZONTAL, 5 )
self.plot_but = wx.Button( self, wx.ID_ANY, u"Plot", wx.DefaultPosition, wx.DefaultSize, 0 )
self.plot_but.Enable( False )
launch_opt.Add( self.plot_but, wx.GBPosition( 0, 1 ), wx.GBSpan( 1, 1 ), wx.ALL, 5 )
bSizer1.Add( launch_opt, 0, wx.ALIGN_CENTER_HORIZONTAL, 5 )