import PySimpleGUI as sg import time import sys sys.path.append(r'/Users/bartkowiak/Programs/frappy/frappy') from secop.client import SecopClient from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg import matplotlib.pyplot as plt from numpy.random import rand import numpy as np def draw_figure(canvas, figure): figure_canvas_agg = FigureCanvasTkAgg(figure, canvas) figure_canvas_agg.draw() figure_canvas_agg.get_tk_widget().pack(side='top', fill='both', expand=1) return figure_canvas_agg def upd_flim(inp): return int(inp) def connection_handler(sec,status,IP,port, cstate): if cstate == -1 and status == False: try : cstate = 1 #sock.connect((IP,int(port))) sec = SecopClient(IP+':'+port) sec.connect() sec.setParameter('f','control',False) status = False except : cstate = -1 status = True elif status == True and cstate == 1 : status = False sec.disconnect() #sock.close() cstate = -1 return cstate, status,sec def new_xy(sec, cstate): xn = 0 yn = 0 if cstate == 1: try: xn = sec.getParameter('roi0','i')[0] yn = sec.getParameter('roi0','q')[0] except: pass return xn, yn def send_new_f(sec, cstate, freq): if cstate == 1: freq = sec.setParameter('f','basefreq',freq) return freq # THIS IS THE MAIN LOOP def main(): # define the main loop freq = '10000000' f_start = 39000000 f_end = 42000000 new_f = f_start down = True down2 = True cstate = -1 tstart = time.time() x = np.array([]) y = np.array([]) IP = 'pc13252' port = '5000' sec = SecopClient(IP+':'+port) layout = [ [sg.Text('Frequency Tuner)')], [sg.Text('IP\t\t:',font= ("Helvetica",22)),sg.InputText(key='_IP_',default_text=IP,font= ("Helvetica",22),size=(15,1))], [sg.Text('PORT\t\t:',font= ("Helvetica",22)),sg.InputText(key='_PORT_',default_text=port,font= ("Helvetica",22),size=(15,1)),sg.T(' ' * 41), sg.Button('connect',key='connect',font= ("Helvetica",22))], [sg.Text('Start Frequency\t:',font= ("Helvetica",22)),sg.InputText(key='_f_start_', default_text='39000000',font= ("Helvetica",22),size=(15,1))], [sg.Text('Stop Frequency\t:',font= ("Helvetica",22)),sg.InputText(key='_f_end_',default_text='45000000',font= ("Helvetica",22),size=(15,1))], [sg.Slider(range=(f_start, f_end),key='_SLtune_', orientation='h',font= ("Helvetica",22), size=(35, 20), default_value=f_start),sg.T(' ' * 2),sg.Button('sweep',key='sweep',font= ("Helvetica",22))], [sg.Canvas(size=(640, 480), key='-CANVAS-')], [sg.Button('Exit',font= ("Helvetica",22)),sg.T(' ' * 150),sg.Button('Clear Plot',key='clp',font= ("Helvetica",22))] ] # a couple of buttons window = sg.Window('Frequency tuner', layout, finalize=True) canvas_elem = window['-CANVAS-'] canvas = canvas_elem.TKCanvas # draw the intitial scatter plot fig, ax = plt.subplots() ax.grid(True) fig_agg = draw_figure(canvas, fig) while True: # Event Loop event, values = window.Read(timeout=0.5) if event in (None, 'Exit'): # checks if user wants to exit if cstate == 1: connection_handler(sec,True,values['_IP_'],values['_PORT_'],cstate) break if event == 'connect': down = not down window['connect'].Update(('disconnect','connect')[down]) cstate, down, sec = connection_handler(sec,down,values['_IP_'],values['_PORT_'],cstate) if event == 'sweep': down2 = not down2 window['sweep'].Update(('sweeping','sweep')[down2]) #if event in ('_SL8_','_SL6_','_SL4_','_SL2_'): # the two lines of code needed to get button and run command #freq = update_freq(inp=[values['_SL8_'],values['_SL6_'],values['_SL4_'],values['_SL2_']]) if down2 == False: if time.time() - tstart > 1.: tstart = time.time() new_f = int(int(values['_SLtune_']) + (int(values['_f_end_'])-int(values['_f_start_']))/200) send_new_f(sec,cstate,new_f) window['_SLtune_'].Update(value=new_f) if event == 'clp': x = np.array([]) y = np.array([]) window['_SLtune_'].Update(range=(int(values['_f_start_']),int(values['_f_end_']))) xn,yn = new_xy(sec,cstate) ax.cla() ax.grid(True) x = np.append(x,xn) y = np.append(y,yn) ax.plot(x, y) fig_agg.draw() window.Close() if __name__ == '__main__': main()