Add serial searching
I am not quite sure how to structure this program. I put the serial object in the Application object, but it seems that over time the MainWin class will just have a million initialization parameters.
This commit is contained in:
parent
1786411365
commit
b10c5c075b
|
@ -1,6 +1,4 @@
|
|||
import wx
|
||||
import mainwin
|
||||
from app import App
|
||||
|
||||
app = wx.App(False)
|
||||
mainwin.MainWin()
|
||||
app = App()
|
||||
app.MainLoop()
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
import wx
|
||||
import serial
|
||||
from mainwin import MainWin
|
||||
|
||||
class App(wx.App):
|
||||
def serial_setup(self, port):
|
||||
self.ser.port = port
|
||||
print(self.ser.port)
|
||||
|
||||
def __init__(self):
|
||||
wx.App.__init__(self, False)
|
||||
self.ser = serial.Serial(baudrate=115200)
|
||||
|
||||
self.win = MainWin(self.serial_setup)
|
31
mainwin.py
31
mainwin.py
|
@ -1,31 +1,16 @@
|
|||
import wx
|
||||
from sercomm import SerialMenu
|
||||
import serial
|
||||
|
||||
class MainWin(wx.Frame):
|
||||
def __init__(self):
|
||||
def __init__(self, serconn):
|
||||
wx.Frame.__init__(self, None, wx.ID_ANY, "Dagon Controller")
|
||||
|
||||
self.main_sizer = wx.BoxSizer(wx.VERTICAL)
|
||||
self.ser = serial.Serial(baudrate=115200)
|
||||
|
||||
# Top buttons
|
||||
self.top_sizer = wx.BoxSizer(wx.HORIZONTAL)
|
||||
self.plan_btn = wx.Button(self, label="Plan",
|
||||
style=wx.BU_EXACTFIT)
|
||||
self.conn_btn = wx.Button(self, label="(Re)Connect",
|
||||
style=wx.BU_EXACTFIT)
|
||||
self.ser_sel = wx.Choice(self, choices=["(none)"])
|
||||
|
||||
for i in (self.plan_btn, self.conn_btn):
|
||||
self.top_sizer.Add(i, 0, wx.EXPAND)
|
||||
self.top_sizer.Add(self.ser_sel, 1, wx.EXPAND)
|
||||
|
||||
self.main_sizer.Add(self.top_sizer, 0, wx.EXPAND)
|
||||
|
||||
self.commbox = wx.TextCtrl(self, style=
|
||||
wx.TE_MULTILINE | wx.TE_READONLY | wx.TE_RICH2)
|
||||
|
||||
self.main_sizer.Add(self.commbox, 1, wx.EXPAND)
|
||||
self.SetSizer(self.main_sizer)
|
||||
self.SetAutoLayout(1)
|
||||
self.main_sizer.Fit(self)
|
||||
serial_menu = SerialMenu(serconn)
|
||||
menubar = wx.MenuBar()
|
||||
menubar.Append(serial_menu, "&Serial")
|
||||
self.SetMenuBar(menubar)
|
||||
|
||||
self.Show(True)
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
import wx
|
||||
import serial
|
||||
from serial.tools.list_ports import comports
|
||||
|
||||
def repr_and_name(v):
|
||||
s = v.device
|
||||
for i in (v.name, v.description, v.hwid):
|
||||
if i != "n/a":
|
||||
s = f"{s} - {i}"
|
||||
return (v.device, s)
|
||||
def repr_and_name_list():
|
||||
return [repr_and_name(x) for x in comports()]
|
||||
|
||||
class SerialSelector(wx.MenuItem):
|
||||
def __init__(self, parent, port, disp):
|
||||
wx.MenuItem.__init__(self, parent, wx.ID_ANY, disp)
|
||||
self.port = port
|
||||
|
||||
class SerialMenu(wx.Menu):
|
||||
def _refresh_devices(self, _):
|
||||
for i in self.devices:
|
||||
self.Bind(wx.EVT_MENU, None, i)
|
||||
self.Delete(i)
|
||||
self.devices = []
|
||||
|
||||
for (nm, listing) in repr_and_name_list():
|
||||
x = SerialSelector(self, nm, listing)
|
||||
self.devices.append(x)
|
||||
self.Append(x)
|
||||
self.Bind(wx.EVT_MENU, lambda _ : self.serconn(x.port),
|
||||
x)
|
||||
|
||||
def __init__(self, serconn):
|
||||
wx.Menu.__init__(self)
|
||||
self.invar = [
|
||||
self.Append(wx.ID_ANY, "&Refresh", "Refresh devices"),
|
||||
self.AppendSeparator()
|
||||
]
|
||||
self.Bind(wx.EVT_MENU, self._refresh_devices, self.invar[0])
|
||||
self.devices = []
|
||||
self.serconn = serconn
|
||||
self._refresh_devices(None)
|
Reference in New Issue