import tkinter as tk from tkinter.constants import W, X import serial.tools.list_ports import functools import tkinter.ttk as ttk import labrobot as lrb # serial ports ports = serial.tools.list_ports.comports() serialObj = serial.Serial() def serial_ports(): return serial.tools.list_ports.comports() def on_select(event=None): serialObj.port = cb.get().split(' ')[0] serialObj.baudrate = 115200 serialObj.open() root = tk.Tk() #configue root root.title("Jfs Labrobot") root.geometry('800x500+300+300') root.columnconfigure(0,weight=1) root.rowconfigure(0,weight=1) #root.config(bg='#b7f731') notebook = ttk.Notebook(root) notebook.grid(sticky='news',padx=5,pady=5) notebook.enable_traversalrightmainframe = ttk.Frame(notebook) mainframe = ttk.Frame(notebook) #mainframe.rowconfigure(0,weight=1) mainframe.columnconfigure(0,weight=1) notebook.add(mainframe,text='main',underline=0) leftframe = ttk.Frame(mainframe) leftframe.columnconfigure(0,weight=1) leftframe.rowconfigure(1,weight=1) leftframe.grid(column=0,row=0,sticky='news') rightframe = ttk.Frame(mainframe) rightframe.columnconfigure(0,weight=1) rightframe.rowconfigure(0,weight=1) rightframe.grid(column=1,row=0,sticky='new') uprightframe =ttk.LabelFrame(rightframe,text='Basic') uprightframe.grid(column=0,row=0,sticky='ns') downrightframe =ttk.LabelFrame(rightframe,text='More to select') downrightframe.grid(column=0,row=1,sticky='new',pady=5) cb =ttk.Combobox(leftframe,values=serial_ports()) cb.grid(row=0,column=0,stick="nwe") cb.bind('<>',on_select) scb =tk.Scrollbar(leftframe) scb.grid(row=1,column=1,sticky='ns') #txt = tk.Text(leftframe,height=30,width=50) txt = tk.Text(leftframe) txt.grid(row=1,column=0,sticky='ewns') scb.config(command=txt.yview) txt.config(yscrollcommand=scb.set) txt.tag_configure('small',font=('Verdana',8),foreground='black') b1 = ttk.Button(uprightframe,text='Home All',width=12) b1.grid(row=0,column=0,sticky='nw') b2 = ttk.Button(uprightframe,text='Home X',width=12) b2.grid(row=0,column=1,sticky='ne') b3 = ttk.Button(uprightframe,text='Home Y',width=12) b3.grid(row=1,column=0,sticky='nw') b4 = ttk.Button(uprightframe,text='Home Z',width=12) b4.grid(row=1,column=1,sticky='ne') b6 = ttk.Button(uprightframe,text='Home P',width=12) b6.grid(row=2,column=0,sticky='nw') b7 = ttk.Button(uprightframe,text='Get Position',width=12) b7.grid(row=2,column=1,sticky='ne') l1 = ttk.Label(uprightframe,text="Enter G-Code").grid(row=3,column=0) e1 = ttk.Entry(uprightframe).grid(row=3,column=1) b5 = ttk.Button(uprightframe,text='Send Code') b5.grid(row=4,column=1,sticky="ne") b8 = ttk.Button(downrightframe,text='Next Tip') b8.grid(row=0,column=0,sticky='ne') b9 = ttk.Button(downrightframe,text='Up') b9.grid(row=0,column=1,sticky='ne') b10 = ttk.Button(downrightframe,text='Down') b10.grid(row=0,column=2,sticky='ne') ### Parts ## init Labrobot pip = lrb.LabPip(vol=1000,top=22) pip.fe =5000 xoffset = tk.DoubleVar() xoffset.set(15) yoffset = tk.DoubleVar() yoffset.set(1.6) rows = tk.IntVar() rows.set(5) cols = tk.IntVar() cols.set(10) xspace = tk.DoubleVar() xspace.set(10.8) yspace = tk.DoubleVar() yspace.set(18.3) tipvol = tk.IntVar() tipvol.set(1000) lpb = lrb.LabPipBlock(xoffset.get(),1,70,50,5,108,86) partframe = ttk.Frame(notebook) #partframe.rowconfigure(0,weight=1) partframe.columnconfigure(0,weight=1) notebook.add(partframe,text='parts',underline=0) pipblockframe =ttk.LabelFrame(partframe,text='Tip Block') pipblockframe.grid(column=0,row=0,sticky='wns',padx=5,pady=5) pl1 = ttk.Label(pipblockframe,text='X offset').grid(column=0,row=0,padx=5) pe1 = ttk.Entry(pipblockframe,textvariable=xoffset) pe1.grid(column=1,row=0,sticky='e') pl2 = ttk.Label(pipblockframe,text='rows').grid(column=0,row=2,padx=5) pe2 = ttk.Entry(pipblockframe,textvariable=rows) pe2.grid(column=1,row=2,sticky='e') pl3 = ttk.Label(pipblockframe,text='columns').grid(column=0,row=3,padx=5) pe3 = ttk.Entry(pipblockframe,textvariable=cols) pe3.grid(column=1,row=3,sticky='e') pl4 = ttk.Label(pipblockframe,text='x space').grid(column=0,row=4,padx=5) pe4 = ttk.Entry(pipblockframe,textvariable=xspace) pe4.grid(column=1,row=4,sticky='e') pl5 = ttk.Label(pipblockframe,text='y space').grid(column=0,row=5,padx=5) pe5 = ttk.Entry(pipblockframe,textvariable=yspace) pe5.grid(column=1,row=5,sticky='e') pl6 = ttk.Label(pipblockframe,text='Y offset').grid(column=0,row=1,padx=5) pe6 = ttk.Entry(pipblockframe,textvariable=yoffset) pe6.grid(column=1,row=1,sticky='e') ttk.Separator(pipblockframe, orient=tk.HORIZONTAL).grid(row=6,sticky='ew') pl7 = ttk.Label(pipblockframe,text='Tip Volume').grid(column=0,row=7,padx=5) pe7 = ttk.Entry(pipblockframe,textvariable=tipvol) pe7.grid(column=1,row=7,sticky='e') ### commands and bindings def homeAll(): serialObj.write(b'\n') b1.configure(command=homeAll) def homeX(): serialObj.write(b'\n') b2.configure(command=homeX) def homeY(): serialObj.write(b'\n') b3.configure(command=homeY) def homeZ(): serialObj.write(b'\n') b4.configure(command=homeZ) def homeP(): serialObj.write(b'\n') b6.configure(command=homeP) def getPos(): serialObj.write(b'\n') b7.configure(command=getPos) def do_gcode(): s = e1.get() s = s + '\n' print(s) serialObj.write(s.encode('utf-8')) b5.configure(command=do_gcode) def upTip(): serialObj.write(pip.up().encode('utf-8')) b9.configure(command=upTip) def downTip(): serialObj.write(pip.down().encode('utf-8')) b10.configure(command=downTip) def nextTip(): upTip() serialObj.write(pip.get_tip(lpb.next()).encode('utf-8')) downTip() b8.configure(command=nextTip) def checkSerialPort(): if serialObj.isOpen() and serialObj.in_waiting: recentPacket = serialObj.readline() recentPacketString = recentPacket.decode('utf') txt.insert('0.1',recentPacketString,'small') while True: root.update() checkSerialPort()