from tkinter import * from tkinter import ttk #import scratch_53 as bone from functools import partial import bone from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg bgg = 'lightgrey' root = Tk() root.geometry('750x600+200+100') root.title('sensor software') root.config(background=bgg) tab_parent = ttk.Notebook(root) tab1 = ttk.Frame(tab_parent) tab2 = ttk.Frame(tab_parent) tab3 = ttk.Frame(tab_parent) tab4 = ttk.Frame(tab_parent) tab_parent.add(tab1, text=" m. load settings") tab_parent.add(tab2, text=" m. Sensor settings") tab_parent.add(tab3, text="pump settings") tab_parent.add(tab4, text="O2 settings") tab_parent.pack(expand=1, fill='both', padx=10,pady=(0,10)) noteStyler = ttk.Style() noteStyler.configure("TNotebook.Tab", background=bgg) noteStyler.configure("TFrame", background=bgg) #Button(tab1, text="Start mech-load and saving ", width=15, command=startsaving).grid(row=2, column=10, sticky=W) #Button(tab1, text="Stop", width=6, command=clickstop).grid(row=2, column=11, sticky=W) lblframe1 = LabelFrame(tab1, text="single mechanical load", bg=bgg) lblframe1.pack(padx=10,pady=10,anchor='nw') freq_entry0= Entry(lblframe1, width=12, bg='white') freq_entry0.grid(row=2, column=3, sticky=W,padx=13) freq_entry1= Entry(lblframe1, width=12, bg='white') freq_entry1.grid(row=3, column=3, sticky=W,padx=13) freq_entry2= Entry(lblframe1, width=12, bg='white') freq_entry2.grid(row=4, column=3, sticky=W,padx=13) freq_entry3= Entry(lblframe1, width=12, bg='white') freq_entry3.grid(row=5, column=3, sticky=W,padx=13, pady=(7,20)) mbar_entry0= Entry(lblframe1, width=12, bg='white') mbar_entry0.grid(row=2, column=4, sticky=W,padx=13) mbar_entry1= Entry(lblframe1, width=12, bg='white') mbar_entry1.grid(row=3, column=4, sticky=W,padx=13) mbar_entry2= Entry(lblframe1, width=12, bg='white') mbar_entry2.grid(row=4, column=4, sticky=W,padx=13) mbar_entry3= Entry(lblframe1, width=12, bg='white') mbar_entry3.grid(row=5, column=4, sticky=W,padx=13, pady=(7,20)) Label (lblframe1, text="Frequency (hz)", bg=bgg) .grid(row=1, column=3, sticky=W,padx=10,pady=(10,0)) Label (lblframe1, text="pressure (mbar)", bg=bgg) .grid(row=1, column=4, sticky=W,padx=10,pady=(10,0)) Label (lblframe1, text="Chip 1", fg="blue", bg=bgg) .grid(row=2, column=1, sticky=W,pady=7,padx=20) Label (lblframe1, text="Chip 2", fg="red", bg=bgg) .grid(row=3, column=1, sticky=W,pady=7,padx=20) Label (lblframe1, text="Chip 3", fg="green", bg=bgg ) .grid(row=4, column=1, sticky=W,pady=7,padx=20) Label (lblframe1, text="Chip 4", fg="orange", bg=bgg ) .grid(row=5, column=1, sticky=W,padx=20, pady=(7,20)) Button(lblframe1, text="Set", width=6, bg=bgg, command=partial(bone.paralsinglemechload, 0, freq_entry0, mbar_entry0)).grid(row=2, column=5, sticky=W) Button(lblframe1, text="Set", width=6, bg=bgg, command=partial(bone.paralsinglemechload, 1, freq_entry1, mbar_entry1)).grid(row=3, column=5, sticky=W) Button(lblframe1, text="Set", width=6, bg=bgg, command=partial(bone.paralsinglemechload, 2, freq_entry2, mbar_entry2)).grid(row=4, column=5, sticky=W) Button(lblframe1, text="Set", width=6, bg=bgg, command=partial(bone.paralsinglemechload, 3, freq_entry3, mbar_entry3)).grid(row=5, column=5, sticky=W, padx=(0,80), pady=(7,20)) lblframe2 = LabelFrame(tab1, text="Multiple mechanical loading", bg=bgg) lblframe2.pack(padx=10,pady=10, anchor='sw') ##############multi mechanical load################ Label (lblframe2, text="Freq(hz)", bg=bgg) .grid(row=1, column=2, sticky=W, pady=(20,0)) Label (lblframe2, text="Force(N)", bg=bgg) .grid(row=1, column=3, sticky=W, pady=(20,0)) Label (lblframe2, text="Lenght(s)", bg=bgg) .grid(row=1, column=4, sticky=W, pady=(20,0), padx=(0,80)) Label (lblframe2, text="Freq(hz)", bg=bgg) .grid(row=1, column=7, sticky=W, pady=(20,0)) Label (lblframe2, text="Force(N)", bg=bgg) .grid(row=1, column=8, sticky=W, pady=(20,0)) Label (lblframe2, text="Lenght(s)", bg=bgg) .grid(row=1, column=9, sticky=W, pady=(20,0), padx=(0,80)) Label (lblframe2, text="Freq(hz)", bg=bgg) .grid(row=6, column=2, sticky=W, pady=(60,0)) Label (lblframe2, text="Force(N)", bg=bgg) .grid(row=6, column=3, sticky=W, pady=(60,0)) Label (lblframe2, text="Lenght(s)", bg=bgg) .grid(row=6, column=4, sticky=W, pady=(60,0), padx=(0,80)) Label (lblframe2, text="Freq(hz)", bg=bgg) .grid(row=6, column=7, sticky=W, pady=(60,0)) Label (lblframe2, text="Force(N)", bg=bgg) .grid(row=6, column=8, sticky=W, pady=(60,0)) Label (lblframe2, text="Lenght(s)", bg=bgg) .grid(row=6, column=9, sticky=W, pady=(60,0), padx=(0,80)) Label (lblframe2, text="Chip 1", fg="blue", bg=bgg) .grid(row=1, column=1, sticky=W, padx=10, pady=(20,0)) Label (lblframe2, text="Chip 2", fg="red", bg=bgg) .grid(row=1, column=6, sticky=W, padx=(30,10), pady=(20,0)) Label (lblframe2, text="Chip 3", fg="green", bg=bgg ) .grid(row=6, column=1, sticky=W,padx=10, pady=(60,0)) Label (lblframe2, text="Chip 4", fg="orange", bg=bgg ) .grid(row=6, column=6, sticky=W, padx=(30,10), pady=(60,0)) Label (lblframe2, text="1st load", bg=bgg) .grid(row=2, column=1, sticky=W,padx=10) Label (lblframe2, text="2nd load", bg=bgg) .grid(row=3, column=1, sticky=W,padx=10) Label (lblframe2, text="3rd load", bg=bgg) .grid(row=4, column=1, sticky=W,padx=10) Label (lblframe2, text="1st load", bg=bgg) .grid(row=2, column=6, sticky=W,padx=(30,10)) Label (lblframe2, text="2nd load", bg=bgg) .grid(row=3, column=6, sticky=W,padx=(30,10)) Label (lblframe2, text="3rd load", bg=bgg) .grid(row=4, column=6, sticky=W,padx=(30,10)) Label (lblframe2, text="1st load", bg=bgg) .grid(row=7, column=1, sticky=W,padx=10) Label (lblframe2, text="2nd load", bg=bgg) .grid(row=8, column=1, sticky=W,padx=10) Label (lblframe2, text="3rd load", bg=bgg) .grid(row=9, column=1, sticky=W,padx=10,pady=(0,20)) Label (lblframe2, text="1st load", bg=bgg) .grid(row=7, column=6, sticky=W,padx=(30,10)) Label (lblframe2, text="2nd load", bg=bgg) .grid(row=8, column=6, sticky=W,padx=(30,10)) Label (lblframe2, text="3rd load", bg=bgg) .grid(row=9, column=6, sticky=W,padx=(30,10),pady=(0,20)) ttk.Separator(lblframe2, orient=HORIZONTAL).grid(row=6, column=0, columnspan=10, sticky='we') ttk.Separator(lblframe2, orient=VERTICAL).grid(column=5, row=0, rowspan=10, sticky='ns') #### for channel 1##### freq_entry4= Entry(lblframe2, width=8, bg='white') freq_entry4.grid(row=2, column=2, sticky=W, padx=(0,10)) freq_entry5= Entry(lblframe2, width=8, bg='white') freq_entry5.grid(row=3, column=2, sticky=W) freq_entry6= Entry(lblframe2, width=8, bg='white') freq_entry6.grid(row=4, column=2, sticky=W,pady=(5,0)) mbar_entry4= Entry(lblframe2, width=8, bg='white') mbar_entry4.grid(row=2, column=3, sticky=W, padx=(0,10)) mbar_entry5= Entry(lblframe2, width=8, bg='white') mbar_entry5.grid(row=3, column=3, sticky=W) mbar_entry6= Entry(lblframe2, width=8, bg='white') mbar_entry6.grid(row=4, column=3, sticky=W,pady=(5,0)) time_entry4= Entry(lblframe2, width=8, bg='white') time_entry4.grid(row=2, column=4, sticky=W, padx=(0,10)) time_entry5= Entry(lblframe2, width=8, bg='white') time_entry5.grid(row=3, column=4, sticky=W) time_entry6= Entry(lblframe2, width=8, bg='white') time_entry6.grid(row=4, column=4, sticky=W,pady=(5,0)) ########### for channel 2 ####### freq_entry7= Entry(lblframe2, width=8, bg='white') freq_entry7.grid(row=2, column=7, sticky=W, padx=(0,10)) freq_entry8= Entry(lblframe2, width=8, bg='white') freq_entry8.grid(row=3, column=7, sticky=W) freq_entry9= Entry(lblframe2, width=8, bg='white') freq_entry9.grid(row=4, column=7, sticky=W,pady=(5,0)) mbar_entry7= Entry(lblframe2, width=8, bg='white') mbar_entry7.grid(row=2, column=8, sticky=W, padx=(0,10)) mbar_entry8= Entry(lblframe2, width=8, bg='white') mbar_entry8.grid(row=3, column=8, sticky=W) mbar_entry9= Entry(lblframe2, width=8, bg='white') mbar_entry9.grid(row=4, column=8, sticky=W,pady=(5,0)) time_entry7= Entry(lblframe2, width=8, bg='white') time_entry7.grid(row=2, column=9, sticky=W, padx=(0,10)) time_entry8= Entry(lblframe2, width=8, bg='white') time_entry8.grid(row=3, column=9, sticky=W) time_entry9= Entry(lblframe2, width=8, bg='white') time_entry9.grid(row=4, column=9, sticky=W,pady=(5,0)) ######## for channel 3 ################## freq_entry10= Entry(lblframe2, width=8, bg='white') freq_entry10.grid(row=7, column=2, sticky=W, padx=(0,10)) freq_entry11= Entry(lblframe2, width=8, bg='white') freq_entry11.grid(row=8, column=2, sticky=W) freq_entry12= Entry(lblframe2, width=8, bg='white') freq_entry12.grid(row=9, column=2, sticky=W,pady=(6,20)) mbar_entry10= Entry(lblframe2, width=8, bg='white') mbar_entry10.grid(row=7, column=3, sticky=W, padx=(0,10)) mbar_entry11= Entry(lblframe2, width=8, bg='white') mbar_entry11.grid(row=8, column=3, sticky=W) mbar_entry12= Entry(lblframe2, width=8, bg='white') mbar_entry12.grid(row=9, column=3, sticky=W,pady=(6,20)) time_entry10= Entry(lblframe2, width=8, bg='white') time_entry10.grid(row=7, column=4, sticky=W, padx=(0,10)) time_entry11= Entry(lblframe2, width=8, bg='white') time_entry11.grid(row=8, column=4, sticky=W) time_entry12= Entry(lblframe2, width=8, bg='white') time_entry12.grid(row=9, column=4, sticky=W,pady=(6,20)) ################# for channel 4 ################# freq_entry13= Entry(lblframe2, width=8, bg='white') freq_entry13.grid(row=7, column=7, sticky=W, padx=(0,10)) freq_entry14= Entry(lblframe2, width=8, bg='white') freq_entry14.grid(row=8, column=7, sticky=W) freq_entry15= Entry(lblframe2, width=8, bg='white') freq_entry15.grid(row=9, column=7, sticky=W,pady=(6,20)) mbar_entry13= Entry(lblframe2, width=8, bg='white') mbar_entry13.grid(row=7, column=8, sticky=W, padx=(0,10)) mbar_entry14= Entry(lblframe2, width=8, bg='white') mbar_entry14.grid(row=8, column=8, sticky=W) mbar_entry15= Entry(lblframe2, width=8, bg='white') mbar_entry15.grid(row=9, column=8, sticky=W,pady=(6,20)) time_entry13= Entry(lblframe2, width=8, bg='white') time_entry13.grid(row=7, column=9, sticky=W, padx=(0,10)) time_entry14= Entry(lblframe2, width=8, bg='white') time_entry14.grid(row=8, column=9, sticky=W) time_entry15= Entry(lblframe2, width=8, bg='white') time_entry15.grid(row=9, column=9, sticky=W,pady=(6,20)) Button(lblframe2, text="Set", width=6, bg=bgg, command=partial(bone.paralmultimechload, 0, freq_entry4, freq_entry5, freq_entry6, time_entry4, time_entry5, time_entry6, mbar_entry4, mbar_entry5, mbar_entry6 )).grid(row=2, column=4, sticky=W, padx=(60,40)) Button(lblframe2, text="Set", width=6, bg=bgg, command=partial(bone.paralmultimechload, 1, freq_entry7, freq_entry8, freq_entry9, time_entry7, time_entry8, time_entry9, mbar_entry7, mbar_entry8, mbar_entry9 )).grid(row=2, column=9, sticky=W, padx=70) Button(lblframe2, text="Set", width=6, bg=bgg, command=partial(bone.paralmultimechload, 2, freq_entry10, freq_entry11, freq_entry12, time_entry10, time_entry11, time_entry12, mbar_entry10, mbar_entry11, mbar_entry12 )).grid(row=7, column=4, sticky=W, padx=(60,40)) Button(lblframe2, text="Set", width=6, bg=bgg, command=partial(bone.paralmultimechload, 3, freq_entry13, freq_entry14, freq_entry15, time_entry13, time_entry14, time_entry15, mbar_entry13, mbar_entry14, mbar_entry15 )).grid(row=7, column=9, sticky=W, padx=70) ############################### mechanical sensor axis ################## Button(tab2, text="Connect arduino", width=17, bg=bgg, command=bone.connecttoarduino).place(x=20,y=15) Button(tab2, text="import calibration", width=17, bg=bgg, command=bone.importcalibration).place(x=150,y=15) Button(tab2, text="export calibration", width=17, bg=bgg, command=bone.exportcalibration).place(x=280,y=15) Button(tab2, text="Start saving", width=17, bg=bgg, command=bone.startsaving).place(x=410,y=15) Button(tab2, text="Stop saving", width=17, bg=bgg, command=bone.savingdata).place(x=540,y=15) lblframe3 = LabelFrame(tab2, text="Mechanical sesnor calibration", bg=bgg) lblframe3.pack(padx=10,pady=(60,10), anchor='nw') Label (lblframe3, text="Chip 1", fg="blue", bg=bgg) .grid(row=0, column=0, sticky=W, padx=10,pady=(30,10)) Label (lblframe3, text="Chip 2", fg="red", bg=bgg) .grid(row=1, column=0, sticky=W, padx=10,pady=10) Label (lblframe3, text="Chip 3", fg="green" , bg=bgg) .grid(row=2, column=0, sticky=W, padx=10,pady=10) Label (lblframe3, text="Chip 4", fg="orange" , bg=bgg) .grid(row=3, column=0, sticky=W, padx=10,pady=(10,40)) Button(lblframe3, text="Tare", width=13, bg=bgg, command=partial(bone.tare, 0)).grid(row=0, column=1, sticky=W, pady=(30,10), padx=(10,30)) Button(lblframe3, text="Tare", width=13, bg=bgg, command=partial(bone.tare, 1)).grid(row=1, column=1, sticky=W, padx=(10,30)) Button(lblframe3, text="Tare", width=13, bg=bgg, command=partial(bone.tare, 2)).grid(row=2, column=1, sticky=W, padx=(10,30)) Button(lblframe3, text="Tare", width=13, bg=bgg, command=partial(bone.tare, 3)).grid(row=3, column=1, sticky=W, padx=(10,30),pady=(10,40)) Button(lblframe3, text="1st calibration", width=13, bg=bgg, command=partial(bone.firstcalibration, 0)).grid(row=0, column=2, sticky=W, padx=(0,30), pady=(30,10)) Button(lblframe3, text="1st calibration", width=13, bg=bgg, command=partial(bone.firstcalibration, 1)).grid(row=1, column=2, sticky=W, padx=(0,30)) Button(lblframe3, text="1st calibration", width=13, bg=bgg, command=partial(bone.firstcalibration, 2)).grid(row=2, column=2, sticky=W, padx=(0,30)) Button(lblframe3, text="1st calibration", width=13, bg=bgg, command=partial(bone.firstcalibration, 3)).grid(row=3, column=2, sticky=W, padx=(0,30),pady=(10,40)) Button(lblframe3, text="2nd calibration", width=13, bg=bgg, command=partial(bone.secondcalibration, 0)).grid(row=0, column=3, sticky=W, padx=(0,60), pady=(30,10)) Button(lblframe3, text="2nd calibration", width=13, bg=bgg, command=partial(bone.secondcalibration, 1)).grid(row=1, column=3, sticky=W, padx=(0,30)) Button(lblframe3, text="2nd calibration", width=13, bg=bgg, command=partial(bone.secondcalibration, 2)).grid(row=2, column=3, sticky=W, padx=(0,30)) Button(lblframe3, text="2nd calibration", width=13, bg=bgg, command=partial(bone.secondcalibration, 3)).grid(row=3, column=3, sticky=W, padx=(0,30),pady=(10,40)) lblframe4 = LabelFrame(tab2, text="Axis View", bg=bgg) lblframe4.pack(padx=10, anchor='sw') Label (lblframe4, text="Y min", fg="black" , bg=bgg).grid(row=0, column=1, sticky=W, padx=(30,10)) Label (lblframe4, text="Y max", fg="black", bg=bgg ).grid(row=0, column=2, sticky=W, padx=(30,10)) Label (lblframe4, text="Chip 1", fg="blue", bg=bgg) .grid(row=1, column=0, sticky=W, padx=10,pady=10) Label (lblframe4, text="Chip 2", fg="red", bg=bgg) .grid(row=2, column=0, sticky=W, padx=10,pady=10) Label (lblframe4, text="Chip 3", fg="green" , bg=bgg) .grid(row=3, column=0, sticky=W, padx=10,pady=10) Label (lblframe4, text="Chip 4", fg="orange" , bg=bgg) .grid(row=4, column=0, sticky=W, padx=10,pady=(10,30)) textentrysen11= Entry(lblframe4, width=13, bg='white') textentrysen11.grid(row=1, column=1, sticky=W, padx=10) textentrysen12= Entry(lblframe4, width=13, bg='white') textentrysen12.grid(row=1, column=2, sticky=W, padx=10) textentrysen21= Entry(lblframe4, width=13, bg='white') textentrysen21.grid(row=2, column=1, sticky=W, padx=10) textentrysen22= Entry(lblframe4, width=13, bg='white') textentrysen22.grid(row=2, column=2, sticky=W, padx=10) textentrysen31= Entry(lblframe4, width=13, bg='white') textentrysen31.grid(row=3, column=1, sticky=W, padx=10) textentrysen32= Entry(lblframe4, width=13, bg='white') textentrysen32.grid(row=3, column=2, sticky=W, padx=10) textentrysen41= Entry(lblframe4, width=13, bg='white') textentrysen41.grid(row=4, column=1, sticky=W, padx=10,pady=(10,30)) textentrysen42= Entry(lblframe4, width=13, bg='white') textentrysen42.grid(row=4, column=2, sticky=W, padx=10,pady=(10,30)) Button(lblframe4, text="submit", width=6, bg=bgg, command=partial(bone.submit, bone.ax1, textentrysen11, textentrysen12)).grid(row=1, column=3, sticky=W) Button(lblframe4, text="submit", width=6, bg=bgg).grid(row=2, column=3, sticky=W) Button(lblframe4, text="submit", width=6, bg=bgg).grid(row=3, column=3, sticky=W) Button(lblframe4, text="submit", width=6, bg=bgg).grid(row=4, column=3, sticky=W,pady=(10,30),padx=(0,180)) ############### Medium PUMP CONTROL ############################### #pumping= FALSE #pump.write('{}H\r\n'.format(channel).encode()) #pump = serial.Serial("COM9", 9600) #channel = 1 def startpump(): global pump, channel print("pump started") pump.write('{}H\r\n'.format(channel).encode()) #pump.write('{}L\r\n'.format(channel).encode()) def stoppump(): global pump, channel print("pump stopped") pump.write('{}I\r\n'.format(channel).encode()) def clockwise(): global pump, channel pump.write('{}J\r\n'.format(channel).encode()) def anticlockwise(): global pump, channel pump.write('{}K\r\n'.format(channel).encode()) def pumpinput(): global pump, channel pump.write('{}D-12.3\r\n'.format(channel).encode()) def setdefault(): global pump, channel pump.write('{}O\r\n'.format(channel).encode()) def resetotal(): global pump, channel pump.write('{}W\r\n'.format(channel).encode()) def modepumprpm(): global pump, channel pump.write('{}L\r\n'.format(channel).encode()) def modepumpflow(): global pump, channel pump.write('{}M\r\n'.format(channel).encode()) def modepumptime(): global pump, channel pump.write('{}N\r\n'.format(channel).encode()) def modepumpvolume(): global pump, channel pump.write('{}O\r\n'.format(channel).encode()) def modepumptimepluspause(): global pump, channel pump.write('{}P\r\n'.format(channel).encode()) def modepumpvolumepluspause(): global pump, channel pump.write('{}Q\r\n'.format(channel).encode()) #def pumpingdevice(): #global pumping, pump, channel #f pumping == TRUE: #print("pump is running") #pump.write('{}H\r\n'.format(channel).encode()) #elif pumping == FALSE: #print("pump is not running") #return () def clickstop(): global writedata, save writedata = FALSE bone.df1.to_excel("output.xlsx") bone.mechdatasaving.to_excel("attempt.xlsx") lblframe5 = LabelFrame(tab3, text="Pump settings", bg=bgg) lblframe5.pack(padx=20,pady=10, anchor='nw') Button(lblframe5, text="Start pump", bg=bgg, width=13, command=startpump).grid(row=0, column=0, sticky=W, padx=10,pady=(20,10)) Button(lblframe5, text="Stop pump", bg=bgg, width=13, command=stoppump).grid(row=1, column=0, sticky=W, padx=10, pady=(0,30)) Button(lblframe5, text="Clockwise", bg=bgg, width=13, command=clockwise).grid(row=0, column=1, sticky=W, padx=10,pady=(20,10)) Button(lblframe5, text="Anti-Clockwise", bg=bgg, width=13, command=anticlockwise).grid(row=1, column=1, sticky=W, padx=10, pady=(0,30)) Button(lblframe5, text="Pump input", bg=bgg, width=13, command=pumpinput).grid(row=0, column=2, sticky=W, padx=10,pady=(20,10)) Button(lblframe5, text="Reset volume", bg=bgg, width=13, command=resetotal).grid(row=1, column=2, sticky=W, padx=10, pady=(0,30)) Button(lblframe5, text="set default values", bg=bgg, width=13, command=setdefault).grid(row=0, column=3, sticky=W, padx=(10,20),pady=(20,10)) lblframe6 = LabelFrame(tab3, text="Pump modes", bg=bgg) lblframe6.pack(padx=20,pady=10, anchor='sw') Button(lblframe6, text="mode rpm", width=20, bg=bgg, command=modepumprpm).grid(row=0, column=0, sticky=W, padx=10, pady=(20,5)) Button(lblframe6, text="mode flow", width=20, bg=bgg, command=modepumpflow).grid(row=1, column=0, sticky=W, padx=10,pady=5) Button(lblframe6, text="mode disp time", width=20, bg=bgg, command=modepumptime).grid(row=2, column=0, sticky=W,padx=10,pady=(5,60)) Button(lblframe6, text="mode disp volume", width=20, bg=bgg, command=modepumpvolume).grid(row=0, column=1, sticky=W, padx=10, pady=(20,5)) Button(lblframe6, text="mode disp time + pause.", width=20, bg=bgg, command=modepumptimepluspause).grid(row=1, column=1, sticky=W, padx=10,pady=5) Button(lblframe6, text="mode disp vol. + pause", width=20, bg=bgg, command=modepumpvolumepluspause).grid(row=2, column=1, sticky=W, padx=(10,60), pady=(5,60)) ###############################O2 control GUI########################### Button(tab4, text="Connect to Firesting",width=17, background=bgg, command=partial(bone.connecttofiresting)).place(x=20,y=15) Button(tab4, text="Start saving", width=13, background=bgg, command=partial(bone.startsavingo2)).place(x=150,y=15) Button(tab4, text="Stop saving", width=13, background=bgg, command=partial(bone.finalsaveo2)).place(x=252,y=15) lblframe7 = LabelFrame(tab4, text="Conditional based control", bg=bgg) lblframe7.pack(padx=20,pady=(60,10), anchor='nw') Label (lblframe7, text="Objective", bg=bgg) .grid(row=0, column=1, sticky=W, padx=(20,10), pady=(10,0)) Label (lblframe7, text="Tolerance range", bg=bgg) .grid(row=0, column=2, sticky=W, padx=(5,10), pady=(10,0)) Label (lblframe7, text="Action range", bg=bgg) .grid(row=0, column=3, sticky=W, padx=10, pady=(10,0)) Label (lblframe7, text="Chip 1", fg="blue", bg=bgg) .grid(row=1, column=0, sticky=W, padx=20, pady=5) Label (lblframe7, text="Chip 2", fg="red", bg=bgg) .grid(row=2, column=0, sticky=W, padx=20, pady=5) Label (lblframe7, text="Chip 3", fg="green", bg=bgg ) .grid(row=3, column=0, sticky=W, padx=20, pady=5) Label (lblframe7, text="Chip 4", fg="orange", bg=bgg ) .grid(row=4, column=0, sticky=W, padx=20, pady=(5,30)) obj_entry0= Entry(lblframe7, width=15, bg='white').grid(row=1, column=1, sticky=W, padx=10, pady=5) obj_entry1= Entry(lblframe7, width=15, bg='white').grid(row=2, column=1, sticky=W, padx=10, pady=5) obj_entry2= Entry(lblframe7, width=15, bg='white').grid(row=3, column=1, sticky=W, padx=10, pady=5) obj_entry3= Entry(lblframe7, width=15, bg='white').grid(row=4, column=1, sticky=W, padx=10, pady=(5,30)) tol_entry0= Entry(lblframe7, width=15, bg='white').grid(row=1, column=2, sticky=W, padx=10, pady=5) tol_entry1= Entry(lblframe7, width=15, bg='white').grid(row=2, column=2, sticky=W, padx=10, pady=5) tol_entry2= Entry(lblframe7, width=15, bg='white').grid(row=3, column=2, sticky=W, padx=10, pady=5) tol_entry3= Entry(lblframe7, width=15, bg='white').grid(row=4, column=2, sticky=W, padx=10, pady=(5,30)) act_entry0= Entry(lblframe7, width=15, bg='white').grid(row=1, column=3, sticky=W, padx=10, pady=5) act_entry1= Entry(lblframe7, width=15, bg='white').grid(row=2, column=3, sticky=W, padx=10, pady=5) act_entry2= Entry(lblframe7, width=15, bg='white').grid(row=3, column=3, sticky=W, padx=10, pady=5) act_entry3= Entry(lblframe7, width=15, bg='white').grid(row=4, column=3, sticky=W, padx=10, pady=(5,30)) Button(lblframe7, text="set", width=6, bg=bgg, command=partial(bone.paralsimpleo2control, 0, 4, obj_entry0, tol_entry0, act_entry0)).grid(row=1, column=4, sticky=W) Button(lblframe7, text="set", width=6, bg=bgg, command=partial(bone.paralsimpleo2control, 1, 5, obj_entry1, tol_entry1, act_entry1)).grid(row=2, column=4, sticky=W) Button(lblframe7, text="set", width=6, bg=bgg, command=partial(bone.paralsimpleo2control, 2, 6, obj_entry2, tol_entry2, act_entry2)).grid(row=3, column=4, sticky=W) Button(lblframe7, text="set", width=6, bg=bgg, command=partial(bone.paralsimpleo2control, 3, 7, obj_entry3, tol_entry3, act_entry3)).grid(row=4, column=4, sticky=W, padx=(0,60), pady=(5,30)) lblframe8 = LabelFrame(tab4, text="PID control", bg=bgg) lblframe8.pack(padx=20, anchor='sw') Label (lblframe8, text="Objective", bg=bgg) .grid(row=0, column=0, padx=(60,10), pady=5) Label (lblframe8, text="Iteration time(s)", bg=bgg) .grid(row=1, column=0, padx=(20,10), pady=5) Label (lblframe8, text="Kp", bg=bgg) .grid(row=2, column=0, padx=(90,10), pady=5) Label (lblframe8, text="Ki", bg=bgg) .grid(row=3, column=0, padx=(90,10), pady=5) Label (lblframe8, text="Kd", bg=bgg) .grid(row=4, column=0, padx=(90,10), pady=5) Label (lblframe8, text="safety value", bg=bgg) .grid(row=5, column=0, padx=(90,10), pady=5) Label (lblframe8, text="min output", bg=bgg) .grid(row=6, column=0, padx=(90,10), pady=5) Label (lblframe8, text="max output", bg=bgg) .grid(row=7, column=0, padx=(90,10), pady=5) Label (lblframe8, text="kp2", bg=bgg) .grid(row=4, column=2, sticky=W, padx=(10,20), pady=5) Label (lblframe8, text="kpactpoint", bg=bgg) .grid(row=5, column=2, sticky=W, padx=(10,20), pady=5) Label (lblframe8, text="If not used, write 0 on each entry", bg='yellow') .grid(row=6, column=2, sticky=W, padx=(10,20), pady=5) Label (lblframe8, text="except for maxouput", bg='yellow') .grid(row=7, column=2, sticky=W, padx=(10,20), pady=5) PID_entry0= Entry(lblframe8, width=15, bg='white') PID_entry0.grid(row=0, column=1, padx=20, pady=5) PID_entry1= Entry(lblframe8, width=15, bg='white') PID_entry1.grid(row=1, column=1, padx=20, pady=5) PID_entry2= Entry(lblframe8, width=15, bg='white') PID_entry2.grid(row=2, column=1, padx=20, pady=5) PID_entry3= Entry(lblframe8, width=15, bg='white') PID_entry3.grid(row=3, column=1, padx=20, pady=5) PID_entry4= Entry(lblframe8, width=15, bg='white') PID_entry4.grid(row=4, column=1, padx=20, pady=5) PID_entry5= Entry(lblframe8, width=15, bg='white') PID_entry5.grid(row=5, column=1, padx=20, pady=5) PID_entry6= Entry(lblframe8, width=15, bg='white') PID_entry6.grid(row=6, column=1, padx=20, pady=5) PID_entry7= Entry(lblframe8, width=15, bg='white') PID_entry7.grid(row=7, column=1, padx=20, pady=5) PID_entrykp2 = Entry(lblframe8, width=15, bg='white') PID_entrykp2.grid(row=4, column=3, padx=20, pady=5) PID_entrykp2actpoint = Entry(lblframe8, width=15, bg='white') PID_entrykp2actpoint.grid(row=5, column=3, padx=20, pady=5) Label (lblframe8, text="Chip 1", fg="blue", bg=bgg) .grid(row=0, column=2, sticky=W, padx=(10,20), pady=5) Label (lblframe8, text="Chip 2", fg="red", bg=bgg) .grid(row=1, column=2, sticky=W, padx=(10,20), pady=5) Label (lblframe8, text="Chip 3", fg="green", bg=bgg) .grid(row=2, column=2, sticky=W, padx=(10,20), pady=5) Label (lblframe8, text="Chip 4", fg="Orange", bg=bgg) .grid(row=3, column=2, sticky=W, padx=(10,20), pady=5) Button(lblframe8, text="set", width=6, bg=bgg, command=lambda:[bone.PIDinitialization( 0, 0, PID_entry0, PID_entry1, PID_entry2, PID_entry3, PID_entry4, PID_entry5, PID_entry6, PID_entry7, PID_entrykp2, PID_entrykp2actpoint), pidtext(PID_entry0, PID_entry1, PID_entry2, PID_entry3, PID_entry4, 0, "blue")]).grid(row=0, column=3, sticky=W, padx=10, pady=5) Button(lblframe8, text="set", width=6, bg=bgg, command=lambda:[bone.PIDinitialization( 1, 1, PID_entry0, PID_entry1, PID_entry2, PID_entry3, PID_entry4, PID_entry5, PID_entry6, PID_entry7, PID_entrykp2, PID_entrykp2actpoint), pidtext(PID_entry0, PID_entry1, PID_entry2, PID_entry3, PID_entry4, 1, "red")]).grid(row=1, column=3, sticky=W, padx=10, pady=5) Button(lblframe8, text="set", width=6, bg=bgg, command=lambda:[bone.PIDinitialization( 2, 2, PID_entry0, PID_entry1, PID_entry2, PID_entry3, PID_entry4, PID_entry5, PID_entry6, PID_entry7, PID_entrykp2, PID_entrykp2actpoint), pidtext(PID_entry0, PID_entry1, PID_entry2, PID_entry3, PID_entry4, 2, "green")]).grid(row=2, column=3, sticky=W, padx=10, pady=5) Button(lblframe8, text="set", width=6, bg=bgg, command=lambda:[bone.PIDinitialization( 3, 3, PID_entry0, PID_entry1, PID_entry2, PID_entry3, PID_entry4, PID_entry5, PID_entry6, PID_entry7, PID_entrykp2, PID_entrykp2actpoint), pidtext(PID_entry0, PID_entry1, PID_entry2, PID_entry3, PID_entry4, 3, "orange")]).grid(row=3, column=3, sticky=W, padx=(10,40), pady=5) def pidtext (PID_entry0, PID_entry1, PID_entry2, PID_entry3, PID_entry4, row, color): objective = float(PID_entry0.get()) Iterat = float(PID_entry1.get()) Kp= float(PID_entry2.get()) Ki = float(PID_entry3.get()) Kd = float(PID_entry4.get()) C = (" objective:" + str(objective) + " /IteraT: " + str(Iterat) + " /Kp: " + str(Kp) + " /Ki: " + str(Ki) + " /Kd: " + str(Kd) + " ") print(C) Label(lblframe8, text=str(C), fg=str(color), bg=bgg).grid(row=row, column=5, sticky=W, padx=(10, 20), pady=5) def pidbreak(arg1, arg2, row, color): global piddestroy bone.piddestroy[arg1] = True print("I broke the Pid of sensor Number" + str (arg1)) C = (" objective:" + str(arg2) + " /IteraT: " + str(arg2) + " /Kp: " + str(arg2) + " /Ki: " + str(arg2) + " /Kd: " + str(arg2)) print(C) Label(lblframe8, text=str(C), fg=str(color), bg=bgg).grid(row=row, column=5, sticky=W, padx=(10, 20), pady=5) Button(lblframe8, text="Break", width=6, bg=bgg, command=lambda:[pidbreak(0, "N/A", 0, "blue")]).grid(row=0, column=4, sticky=W, padx=10, pady=5) Button(lblframe8, text="Break", width=6, bg=bgg, command=lambda:[pidbreak(1, "N/A", 1, "red")]).grid(row=1, column=4, sticky=W, padx=10, pady=5) Button(lblframe8, text="Break", width=6, bg=bgg, command=lambda:[pidbreak(2, "N/A", 2, "green")]).grid(row=2, column=4, sticky=W, padx=10, pady=5) Button(lblframe8, text="Break", width=6, bg=bgg, command=lambda:[pidbreak(3, "N/A", 3, "Orange")]).grid(row=3, column=4, sticky=W, padx=10, pady=5) class Manager(): def __init__(self): self.root = Tk() self.root.title("Graphical output") self.root.geometry('900x500+200+500') self.create_notebook() def create_notebook(self): notebook = ttk.Notebook(self.root) frame01 = ttk.Frame(notebook) frame02 = ttk.Frame(notebook) notebook.add(frame01, text = "force sensor") notebook.add(frame02, text = "O2 sensor") notebook.grid(row = 0, column = 0) frame1 = ttk.Frame(frame01) frame2 = ttk.Frame(frame02) frame1.grid(row = 0, column = 0) frame2.grid(row=0, column=0) canvas11 = FigureCanvasTkAgg(bone.fig, frame1) #canvas11.show() canvas11.get_tk_widget().grid(row = 0, column = 0) canvas12 = FigureCanvasTkAgg(bone.fig2, frame2) #print (canvas12) #canvas12.show() canvas12.get_tk_widget().grid(row = 0, column = 1) program = Manager() bone.fig.canvas.draw() bone.fig2.canvas.draw() root.mainloop()