from tkinter import * import serial WINDOW = 600 # windows size ser = serial.Serial('/dev/tty.usbserial-AC01N5D9', 1200) # runs on a loop and updates the canvas to reflect the new readings def idle(parent, canvas): line = str(ser.readline()) # b'522\r\n' val = 0 try: val = int(line[2:-5]) except: pass x1 = int(.2*WINDOW + (.9-.2)*WINDOW*val/1023.0) canvas.itemconfigure("text1",text="%d"%val) canvas.coords('rect11',.2*WINDOW,.05*WINDOW,x1,.2*WINDOW) canvas.coords('rect12',x1,.05*WINDOW,.9*WINDOW,.2*WINDOW) canvas.update() parent.after_idle(idle, parent, canvas) # initializes the Tkinter window root = Tk() root.title('Hall Effect Sensor (q to exit)') root.bind('q','exit') canvas = Canvas(root, width=WINDOW, height=.75*WINDOW, background='white') # builds the UI canvas.create_text(.1*WINDOW,.125*WINDOW,text="1",font=("Helvetica", 24),tags="text1",fill="#0000b0") canvas.create_rectangle(.2*WINDOW,.05*WINDOW,.3*WINDOW,.2*WINDOW, tags='rect11', fill='#b00000') canvas.create_rectangle(.3*WINDOW,.05*WINDOW,.9*WINDOW,.2*WINDOW, tags='rect12', fill='#0000b0') canvas.pack() root.after(100, idle, root, canvas) root.mainloop()