Source code for mountastro.mountpad

# -*- coding: utf-8 -*-
import tkinter as tk
from tkinter import ttk
import tkinter.font as tkFont
import os, sys

path = os.path.join(os.path.dirname(__file__), '..')
if path not in sys.path:
    sys.path.append(path)    
# --- celme imports
modulename = 'celme'
if modulename in dir():
    del celme
if modulename not in dir():
    import celme

try:       
    from .mounttools import Mounttools
except:
    from mounttools import Mounttools
    
# #####################################################################
# #####################################################################
# #####################################################################
# Class Mountpad
# #####################################################################
# #####################################################################
# This class provides a pad
# #####################################################################

[docs]class Mountpad(): """ Pad to drive the mount. To access to methods of the main thread of the mount one can use the line under the pad console and type: :: dir(self._main) """ # === Constant for error codes NO_ERROR = 0 ERR_UNKNOWN = 1 _side_items = ['Auto','Tube West','Tube East'] def __init__(self, main, pad_type): self._main = main self.tkroot = None self._pad_type = pad_type self._command_history = [] self._command_history.append('self._main') self._command_history.append('self._main.putread(0,"ALMCLR")') self._command_history.append('self._main.update_motion_states()') self._command_history.append("self._main.radec_cat2app(celme.Date('now').jd(), 90,0 ,{'EQUINOX':'J2000'})") self._command_history_index = len(self._command_history) # --- if self._main!=None: self._side_items = ['Auto',self._main.get_param("LABEL_REGULAR"),self._main.get_param("LABEL_FLIPED")] # --- pad_types = ["pad_dev1"] found = False for pad_type in pad_types : if self._pad_type==pad_type: self.pad_gui_create() # gui will block the code here found = True break if found==False: msg = "pad_type not found amongst {}".format(pad_types) raise Exception(msg) # ========================================== # ========================================== # === pad_dev # ========================================== # ========================================== def pad_cbk_getalarms(self): texte = "No alarm infos for this mode" if self._main!=None: texte = "" for kaxis in range(4): current_axis = self._main.axis[kaxis] if current_axis == None: continue if current_axis.real == False: continue err, res = self._main.putread(kaxis,"ALM") #print("pad_cbk_getalarms err={} res={}".format(err,str(res))) if err!=0 or res[0] == "": texte += "Axis {} {} Pb connection (err={} res={}) ".format(kaxis,current_axis.name,err,str(res)) + "\n" else: res = res[1] texte += "Axis {} {} code = ".format(kaxis,current_axis.name) + str(res) + "\n" found, dico = self._main.error_messages(res) for key, val in dico.items(): texte += str(key) + ": " + str(val) + "\n" texte += "\n" self.pad_var_getalm1.set(texte) def pad_cbk_stop(self): if self._main!=None: self._main.hadec_stop() def pad_cbk_goto(self): ha =self.pad_var_ha.get() dec = self.pad_var_dec.get() side_item = self._pad_combobox_side_hadec.get() side_index = self._side_items.index(side_item) if self._main!=None: if side_index==0: theside = self._main.axis[0].PIERSIDE_AUTO else: if side_index==1: theside = self._main.axis[0].PIERSIDE_POS1 else: theside = self._main.axis[0].PIERSIDE_POS2 #print("side_index={} theside={}".format(side_index, theside)) self._main.hadec_goto(ha, dec, side=theside, blocking=False, drift_ha=0, drift_dec=0) def pad_cbk_name2coord(self): name =self.pad_var_object_name.get() tools = Mounttools() found, ra, dec = tools.vo_simbad(name) if found==0: found, ra, dec= tools.name2coord(name) if found==1: self.pad_var_radec_ra.set(ra) self.pad_var_radec_dec.set(dec) def pad_cbk_radec_goto(self): ra =self.pad_var_radec_ra.get() dec = self.pad_var_radec_dec.get() side_item = self._pad_combobox_side_radec.get() side_index = self._side_items.index(side_item) if self._main!=None: if side_index==0: theside = self._main.axis[0].PIERSIDE_AUTO else: if side_index==1: theside = self._main.axis[0].PIERSIDE_POS1 else: theside = self._main.axis[0].PIERSIDE_POS2 #print("side_index={} theside={}".format(side_index, theside)) self._main.radec_goto(ra, dec, side=theside, blocking=False, drift_ra="sideral", drift_dec=0) def pad_cbk_compute_coord(self): err = self.NO_ERROR try: if self._main!=None: ha, dec, side = self._main.hadec_coord() else: ha, dec, side = (0, 0, 0) if side==1: side = self._main.get_param("LABEL_REGULAR") elif side==-1: side = self._main.get_param("LABEL_FLIPED") else: side = "Unknown" coord = "H.A.="+str(ha)+" Dec="+str(dec)+" Side="+str(side) self.pad_var_coord.set(coord) # if self._main!=None: ra2000, dec2000, side_radec = self._main.radec_coord(EQUINOX="J2000") else: ra2000, dec2000, side_radec = (0, 0, 0) if side_radec==1: side_radec = self._main.get_param("LABEL_REGULAR") elif side_radec==-1: side_radec = self._main.get_param("LABEL_FLIPED") else: side_radec = "Unknown" coord = "R.A.="+str(ra2000)+" Dec="+str(dec2000)+" Side="+str(side_radec) self.pad_var_radec_coord.set(coord) except: print("pb coord") ha, dec, side = (0,0,0) err= self.ERR_UNKNOWN return err, ha, dec, side def pad_cbk_compute_coord_repeated(self): self.pad_cbk_compute_coord() self.tkroot.after(700,self.pad_cbk_compute_coord_repeated) def pad_cbk_compute_motions_repeated(self): if self._main!=None: slewing_state, tracking_state, axes_motion_states = self._main.update_motion_states() for kaxis in range(2): current_axis = self._main.axis[kaxis] # --- if current_axis == None: continue if current_axis.real == True: simureal = "real" else: simureal = "simulation" # --- axis_motion = axes_motion_states[kaxis] motion = "Unknown" if axis_motion==0: motion = "Stoped" elif axis_motion==1: motion = "Slewing" if axis_motion==2: motion = "Drifting" if axis_motion==3: motion = "Moving" # --- if kaxis==0: label = "Motor R.A." else: label = "Motor Dec" # --- texte = "{} ({}) is {}".format(label,simureal,motion) # --- if kaxis==0: self.pad_var_motion_axis_base.set(texte) else: self.pad_var_motion_axis_polar.set(texte) self.tkroot.after(1000,self.pad_cbk_compute_motions_repeated) def pad_cbk_decinc0(self, get=0): if self._main!=None: current_axis = self._main.axis[1] # --- Get the current value inc0 = current_axis._inc0 if get==1: return inc0 # --- Get the new value inc0 = self.pad_var_dec_inc0.get() # --- Set the new value current_axis._inc0 = inc0 self.pad_var_dec_inc0.set(inc0) # --- Get current position to keep the H.A. value ha, dec, side = self._main.hadec_coord() # --- Compute the declination of the visible pole if self._main.site.latitude >= 0: dec = 90 else: dec = -90 # ---GOTO pole #print("inc0 ha={} dec={}".format(ha,dec)) self._main.hadec_goto(ha, dec, side=side, blocking=False, drift_ha=0, drift_dec=0) def pad_cbk_coord_detailed(self): err, ha, dec, side = self.pad_cbk_compute_coord() if err==self.NO_ERROR: if self._main!=None: self._main.disp() def pad_cbk_move_n_event(self,event): if event.type==tk.EventType.ButtonPress: ha_move_deg_per_sec = 0 dec_move_deg_per_sec = -self.pad_var_speed_move.get() if self._main!=None: self._main.hadec_move(ha_move_deg_per_sec, dec_move_deg_per_sec) if event.type==tk.EventType.ButtonRelease: if self._main!=None: self._main.hadec_move_stop() def pad_cbk_move_e_event(self,event): if event.type==tk.EventType.ButtonPress: ha_move_deg_per_sec = self.pad_var_speed_move.get() dec_move_deg_per_sec = 0 if self._main!=None: self._main.hadec_move(ha_move_deg_per_sec, dec_move_deg_per_sec) if event.type==tk.EventType.ButtonRelease: if self._main!=None: self._main.hadec_move_stop() def pad_cbk_move_w_event(self,event): if event.type==tk.EventType.ButtonPress: ha_move_deg_per_sec = -self.pad_var_speed_move.get() dec_move_deg_per_sec = 0 if self._main!=None: self._main.hadec_move(ha_move_deg_per_sec, dec_move_deg_per_sec) if event.type==tk.EventType.ButtonRelease: if self._main!=None: self._main.hadec_move_stop() def pad_cbk_move_s_event(self,event): if event.type==tk.EventType.ButtonPress: ha_move_deg_per_sec = 0 dec_move_deg_per_sec = self.pad_var_speed_move.get() if self._main!=None: self._main.hadec_move(ha_move_deg_per_sec, dec_move_deg_per_sec) if event.type==tk.EventType.ButtonRelease: if self._main!=None: self._main.hadec_move_stop() def pad_cbk_move_w_lim(self,event): if event.type==tk.EventType.ButtonPress: incsimus = [0 for kaxis in range(2)] increals, incsimus = self._main.read_encs(incsimus) kaxis = 1 current_axis = self._main.axis[kaxis] inc0 = current_axis.inc0 print("increals={} inc0={}".format(increals[kaxis],inc0)) if current_axis.real==True: if abs(increals[kaxis] - inc0) < 2: kaxis = 0 current_axis = self._main.axis[kaxis] pc = -1*current_axis.inc_per_sky_rev *0.25 err, res = self._main.inc_goto(kaxis, pc, 30000) pass def pad_cbk_move_e_lim(self,event): if event.type==tk.EventType.ButtonPress: incsimus = [0 for kaxis in range(2)] increals, incsimus = self._main.read_encs(incsimus) kaxis = 1 current_axis = self._main.axis[kaxis] inc0 = current_axis.inc0 print("increals={} inc0={}".format(increals[kaxis],inc0)) if current_axis.real==True: if abs(increals[kaxis] - inc0) < 2: kaxis = 0 current_axis = self._main.axis[kaxis] pc = current_axis.inc_per_sky_rev *0.25 err, res = self._main.inc_goto(kaxis, pc, 30000) pass def pad_cbk_park(self): if self._main!=None: ha = self._main.park_ha dec = self._main.park_dec theside = self._main.park_side self._main.hadec_park(ha, dec, theside) else: ha = 90 dec = 90 theside = self._main.axis[0].PIERSIDE_POS1 self._main.hadec_goto(ha, dec, side=theside, blocking=False) def pad_cbk_quit(self): # --- We can destroy the windows of the gui self.tkroot.destroy() def pad_cbk_snychro(self): if self._main!=None: # --- Get the side from the current position ha, dec, side = self._main.hadec_coord() theside = side # --- Get the ra,dec from the form ra =self.pad_var_radec_ra.get() dec = self.pad_var_radec_dec.get() # --- Synchronize the mount self._main.radec_synchronize(ra, dec, side=theside) def pad_cbk_console(self, event): command =self.pad_var_console.get() res = "" try: exec(f"""locals()['temp'] = {command}""") res = locals()['temp'] #exec(f"""globals()['temp'] = {command}""") #res = globals()['temp'] #print("res={}".format(res)) except Exception as err: res = err #print("type(res)={}".format(type(res))) #print("(2) res={}".format(res)) self.text_console.insert(tk.END,command+"\n","command") self.text_console.yview_moveto(1.0) res = "# "+str(res)+"\n" self.text_console.insert(tk.END,res,"result") self.text_console.yview_moveto(1.0) self._command_history.append(command) self._command_history_index = len(self._command_history) command =self.pad_var_console.set("") def pad_cbk_command_prev(self, event): k = self._command_history_index k -= 1 if k>=0: self._command_history_index = k command = self._command_history[k] self.pad_var_console.set(command) self.entry_console.icursor(tk.END) def pad_cbk_command_next(self, event): n = len(self._command_history) k = self._command_history_index k += 1 if k<n: self._command_history_index = k command = self._command_history[k] self.pad_var_console.set(command) self.entry_console.icursor(tk.END) def pad_cbk_compute_lst(self): if self._main!=None: angle = str(self._main.site.longitude) else: angle = str(0) date = celme.Date("now") jd = date.jd() dateiso = date.iso(0," ") longuai = celme.Angle(angle).rad() meca = celme.Mechanics() lst = meca._mc_tsl(jd,-longuai) ang = celme.Angle(str(lst)+"r") lst_hms = ang.sexagesimal("H0.0") self.pad_var_date.set("UTC {}".format(dateiso)) self.pad_var_lst.set("Local Sideral Time {}".format(lst_hms)) def pad_cbk_compute_lst_repeated(self): self.pad_cbk_compute_lst() self.tkroot.after(500,self.pad_cbk_compute_lst_repeated) def pad_gui_create(self): self.tkroot = tk.Tk() self.tkroot.geometry("+50+50") self.tkroot.title("Mount pad") fontStyle_1 = tkFont.Font(family="Arial", size=14, weight="bold") fontStyle_2 = tkFont.Font(family="Arial", size=12, weight="bold") fontStyle_3 = tkFont.Font(family="Arial", size=10, weight="bold") notebook = ttk.Notebook(self.tkroot) tab1 = ttk.Frame(notebook) tab2 = ttk.Frame(notebook) tab3 = ttk.Frame(notebook) tab4 = ttk.Frame(notebook) # ===================================================== # Onglet 1 # ===================================================== # === Frame of Date & Local Sideral Time self.pad_var_date = tk.StringVar() self.pad_var_lst = tk.StringVar() frame_lst = tk.Frame(tab1) label_date = tk.Label(frame_lst, textvariable=self.pad_var_date, font=fontStyle_2) label_date.pack(side = tk.TOP) label_lst = tk.Label(frame_lst, textvariable=self.pad_var_lst, font=fontStyle_2) label_lst.pack(side = tk.TOP) frame_lst.pack(side = tk.TOP, pady=5) # === Frame of RA,Dec COORD self.pad_var_radec_coord=tk.StringVar() self.pad_var_radec_coord.set("") frame_radec_coord = tk.Frame(tab1) label_radec_coord = tk.Label(frame_radec_coord, textvariable=self.pad_var_radec_coord, font=fontStyle_1) label_radec_coord.pack(side = tk.LEFT) frame_radec_coord.pack(side = tk.TOP, pady=5) # === Frame of name resolver self.pad_var_object_name = tk.StringVar() self.pad_var_object_name.set("vega") frame_name2coord = tk.Frame(tab1) label_name2coord_name = tk.Label(frame_name2coord, text="Object name", font=fontStyle_3) label_name2coord_name.pack(side = tk.LEFT) entry_name2coord_name = tk.Entry(frame_name2coord, textvariable=self.pad_var_object_name, font=fontStyle_3) entry_name2coord_name.pack(side = tk.LEFT) button_name2coord_resolver = tk.Button(frame_name2coord, text="Get coordinates", command=self.pad_cbk_name2coord, font=fontStyle_3) button_name2coord_resolver.pack(side = tk.LEFT) frame_name2coord.pack(side = tk.TOP, pady=5) # === Frame of RA,Dec GOTO self.pad_var_radec_ra = tk.StringVar() self.pad_var_radec_dec = tk.StringVar() self.pad_var_radec_ra.set(self.pad_var_lst.get()) self.pad_var_radec_dec.set("0d") frame_radec_goto = tk.Frame(tab1) label_radec_ra = tk.Label(frame_radec_goto, text="RA", font=fontStyle_3) label_radec_ra.pack(side = tk.LEFT) entry_radec_ra = tk.Entry(frame_radec_goto, textvariable=self.pad_var_radec_ra, font=fontStyle_3) entry_radec_ra.pack(side = tk.LEFT) label_radec_dec = tk.Label(frame_radec_goto, text="Dec", font=fontStyle_3) label_radec_dec.pack(side = tk.LEFT) entry_radec_dec = tk.Entry(frame_radec_goto, textvariable=self.pad_var_radec_dec, font=fontStyle_3) entry_radec_dec.pack(side = tk.LEFT) label_radec_side = tk.Label(frame_radec_goto, text="Side", font=fontStyle_3) label_radec_side.pack(side = tk.LEFT) self._pad_combobox_side_radec = ttk.Combobox(frame_radec_goto,values=self._side_items) self._pad_combobox_side_radec.current(0) self._pad_combobox_side_radec.pack(side = tk.LEFT) button_radec_goto = tk.Button(frame_radec_goto, text="GOTO", command=self.pad_cbk_radec_goto, font=fontStyle_3) button_radec_goto.pack(side = tk.LEFT) frame_radec_goto.pack(side = tk.TOP, pady=5) # === Frame of RA,Dec MOVE self.pad_var_speed_move=tk.DoubleVar() self.pad_var_speed_move.set(1) frame_move = tk.Frame(tab1) # Configuration of the grid manager tab1.rowconfigure(0, weight=1) tab1.columnconfigure(0, weight=1) button_N = tk.Button(frame_move, text="N", height=3, width=10, font=fontStyle_1) button_N.grid(row=0, column=2, sticky="nsew") button_N.bind('<Button-1>',self.pad_cbk_move_n_event) button_N.bind('<ButtonRelease>',self.pad_cbk_move_n_event) button_E = tk.Button(frame_move, text="E", height=3, width=10, font=fontStyle_1) button_E.bind('<Button-1>',self.pad_cbk_move_e_event) button_E.bind('<ButtonRelease>',self.pad_cbk_move_e_event) button_E.grid(row=1, column=1, sticky="nsew") entry_speed_drift = tk.Entry(frame_move, textvariable=self.pad_var_speed_move, width=10, justify='center', font=fontStyle_1) entry_speed_drift.grid(row=1, column=2, sticky="nsew") button_W = tk.Button(frame_move, text="W", height=3, width=10, font=fontStyle_1) button_W.bind('<Button-1>',self.pad_cbk_move_w_event) button_W.bind('<ButtonRelease>',self.pad_cbk_move_w_event) button_W.grid(row=1, column=3, sticky="nsew") button_S = tk.Button(frame_move, text="S", height=3, width=10, font=fontStyle_1) button_S.bind('<Button-1>',self.pad_cbk_move_s_event) button_S.bind('<ButtonRelease>',self.pad_cbk_move_s_event) button_S.grid(row=2, column=2, sticky="nsew") frame_move.pack(side = tk.TOP, pady=5) # === Frames buttons frame_stop = tk.Frame(tab1) button_stop = tk.Button(frame_stop, text="STOP", command=self.pad_cbk_stop, font=fontStyle_3) button_stop.pack(side = tk.LEFT) frame_stop.pack(side = tk.TOP, pady=5) frame_bottom = tk.Frame(tab1) button_synchro = tk.Button(frame_bottom, text="Synchro", command=self.pad_cbk_snychro, font=fontStyle_3) button_synchro.pack(side = tk.LEFT, padx=5, pady=5) button_park = tk.Button(frame_bottom, text="Park", command=self.pad_cbk_park, font=fontStyle_3) button_park.pack(side = tk.LEFT, padx=5, pady=5) button_quit = tk.Button(frame_bottom, text="Quit", command=self.pad_cbk_quit, font=fontStyle_3) button_quit.pack(side = tk.LEFT, padx=5, pady=5) frame_bottom.pack(side = tk.TOP, pady=5) # === Frame of info labels self.pad_var_motion_axis_base = tk.StringVar() self.pad_var_motion_axis_base.set("R.A.") self.pad_var_motion_axis_polar = tk.StringVar() self.pad_var_motion_axis_polar.set("Dec.") frame_motion_axis = tk.Frame(tab1) label_motion_axis_base = tk.Label(frame_motion_axis, textvariable=self.pad_var_motion_axis_base, font=fontStyle_3) label_motion_axis_base.pack(side = tk.LEFT) label_motion_axis_polar = tk.Label(frame_motion_axis, textvariable=self.pad_var_motion_axis_polar, font=fontStyle_3) label_motion_axis_polar.pack(side = tk.RIGHT) frame_motion_axis.pack(side = tk.TOP, pady=5, fill=tk.X) # --- repeat the pad_cbk_* every x sec self.pad_cbk_compute_lst_repeated() self.pad_cbk_compute_coord_repeated() self.pad_cbk_compute_motions_repeated() tab1.pack() # ===================================================== # Onglet 2 # ===================================================== # === Title frame_tab2_title = tk.Frame(tab2) label_tab2_title = tk.Label(frame_tab2_title, text="Calibrations", font=fontStyle_1) label_tab2_title.pack(side = tk.TOP) frame_tab2_title.pack(side = tk.TOP, pady=5) # === Frame of HA,Dec COORD self.pad_var_coord=tk.StringVar() frame_coord = tk.Frame(tab2) label_coord = tk.Label(frame_coord, textvariable=self.pad_var_coord, font=fontStyle_1) label_coord.pack(side = tk.LEFT) button_coord = tk.Button(frame_coord, text="DETAILS", command=self.pad_cbk_coord_detailed, font=fontStyle_3) button_coord.pack(side = tk.LEFT) frame_coord.pack(side = tk.TOP, pady=5) # === Frame of HA,Dec GOTO self.pad_var_ha = tk.StringVar() self.pad_var_ha.set("0h") self.pad_var_dec = tk.StringVar() self.pad_var_dec.set("0d") frame_goto = tk.Frame(tab2) label_ha = tk.Label(frame_goto, text="HA", font=fontStyle_3) label_ha.pack(side = tk.LEFT) entry_ha = tk.Entry(frame_goto, textvariable=self.pad_var_ha, font=fontStyle_3) entry_ha.pack(side = tk.LEFT) label_dec = tk.Label(frame_goto, text="Dec", font=fontStyle_3) label_dec.pack(side = tk.LEFT) entry_dec = tk.Entry(frame_goto, textvariable=self.pad_var_dec, font=fontStyle_3) entry_dec.pack(side = tk.LEFT) label_side = tk.Label(frame_goto, text="Side", font=fontStyle_3) label_side.pack(side = tk.LEFT) self._pad_combobox_side_hadec = ttk.Combobox(frame_goto,values=self._side_items) self._pad_combobox_side_hadec.current(0) self._pad_combobox_side_hadec.pack(side = tk.LEFT) button_goto = tk.Button(frame_goto, text="GOTO", command=self.pad_cbk_goto, font=fontStyle_3) button_goto.pack(side = tk.LEFT) frame_goto.pack(side = tk.TOP, pady=5) # === Frame of HA,Dec MOVE self.pad_var_speed_move_hadec=tk.DoubleVar() self.pad_var_speed_move_hadec.set(1) frame_move_hadec = tk.Frame(tab2) # Configuration of the grid manager tab2.rowconfigure(0, weight=1) tab2.columnconfigure(0, weight=1) button_N_hadec = tk.Button(frame_move_hadec, text="N", height=3, width=10, font=fontStyle_1) button_N_hadec.grid(row=0, column=2, sticky="nsew") button_N_hadec.bind('<Button-1>',self.pad_cbk_move_n_event) button_N_hadec.bind('<ButtonRelease>',self.pad_cbk_move_n_event) button_limE_hadec = tk.Button(frame_move_hadec, text="Lim E", height=3, width=5, font=fontStyle_1) button_limE_hadec.bind('<Button-1>',self.pad_cbk_move_e_lim) button_limE_hadec.grid(row=1, column=0, sticky="nsew") button_E_hadec = tk.Button(frame_move_hadec, text="E", height=3, width=10, font=fontStyle_1) button_E_hadec.bind('<Button-1>',self.pad_cbk_move_e_event) button_E_hadec.bind('<ButtonRelease>',self.pad_cbk_move_e_event) button_E_hadec.grid(row=1, column=1, sticky="nsew") entry_speed_drift_hadec = tk.Entry(frame_move_hadec, textvariable=self.pad_var_speed_move, width=10, justify='center', font=fontStyle_1) entry_speed_drift_hadec.grid(row=1, column=2, sticky="nsew") button_W_hadec = tk.Button(frame_move_hadec, text="W", height=3, width=10, font=fontStyle_1) button_W_hadec.bind('<Button-1>',self.pad_cbk_move_w_event) button_W_hadec.bind('<ButtonRelease>',self.pad_cbk_move_w_event) button_W_hadec.grid(row=1, column=3, sticky="nsew") button_limW_hadec = tk.Button(frame_move_hadec, text="Lim W", height=3, width=5, font=fontStyle_1) button_limW_hadec.bind('<Button-1>',self.pad_cbk_move_w_lim) button_limW_hadec.grid(row=1, column=4, sticky="nsew") button_S_hadec = tk.Button(frame_move_hadec, text="S", height=3, width=10, font=fontStyle_1) button_S_hadec.bind('<Button-1>',self.pad_cbk_move_s_event) button_S_hadec.bind('<ButtonRelease>',self.pad_cbk_move_s_event) button_S_hadec.grid(row=2, column=2, sticky="nsew") frame_move_hadec.pack(side = tk.TOP, pady=5) # === Frame of inc0 of declination self.pad_var_dec_inc0 = tk.DoubleVar() inc0 = self.pad_cbk_decinc0(1) self.pad_var_dec_inc0.set(inc0) frame_decinc0 = tk.Frame(tab2) label_decinc0 = tk.Label(frame_decinc0, text="Declination inc0", font=fontStyle_3) label_decinc0.pack(side = tk.LEFT) entry_decinc0 = tk.Entry(frame_decinc0, textvariable=self.pad_var_dec_inc0, font=fontStyle_3) entry_decinc0.pack(side = tk.LEFT) button_decinc0 = tk.Button(frame_decinc0, text="VALID and GOTO pole", command=self.pad_cbk_decinc0, font=fontStyle_3) button_decinc0.pack(side = tk.LEFT) frame_decinc0.pack(side = tk.TOP, pady=5) # === Frames of console self.pad_var_console = tk.StringVar() frame_console = tk.Frame(tab2) self.text_console = tk.Text(frame_console, height=6, wrap="word", font=fontStyle_3) self.text_console.pack(side = tk.TOP, padx=5, pady=1) self.text_console.tag_config('command', foreground="red") self.text_console.tag_config('result', foreground="blue") self.entry_console = tk.Entry(frame_console, textvariable=self.pad_var_console, font=fontStyle_3) self.entry_console.pack(side = tk.TOP, padx=5, pady=1, fill="both") self.entry_console.bind("<Return>", self.pad_cbk_console) self.entry_console.bind("<Up>", self.pad_cbk_command_prev) self.entry_console.bind("<Down>", self.pad_cbk_command_next) frame_console.pack(side = tk.TOP, pady=5) tab2.pack() # ===================================================== # Onglet 3 # ===================================================== # === Title frame_tab3_title = tk.Frame(tab3) label_tab3_title = tk.Label(frame_tab3_title, text="Configuration", font=fontStyle_1) label_tab3_title.pack(side = tk.TOP) frame_tab3_title.pack(side = tk.TOP, pady=5) # === Config texte = "" if self._main != None: for key,val in self._main.get_params().items(): if key=="SITE": texte += "{} = {}\n".format(key,val.gps) else: texte += "{} = {}\n".format(key,val) frame_tab3_conf1 = tk.Frame(tab3) label_tab3_conf1 = tk.Label(frame_tab3_title, text=texte, font=fontStyle_3) label_tab3_conf1.pack(side = tk.TOP) frame_tab3_conf1.pack(side = tk.TOP, pady=5) tab3.pack() # ===================================================== # Onglet 4 # ===================================================== # === Title frame_tab4_title = tk.Frame(tab4) label_tab4_title = tk.Label(frame_tab4_title, text="Alarms", font=fontStyle_1) label_tab4_title.pack(side = tk.TOP) frame_tab4_title.pack(side = tk.TOP, pady=5) # === Alamrs self.pad_var_getalm1 = tk.StringVar() frame_tab4_alm = tk.Frame(tab4) button_alm = tk.Button(frame_tab4_alm, text="Get alarms", command=self.pad_cbk_getalarms, font=fontStyle_3) button_alm.pack(side = tk.TOP) label_tab4_alm1 = tk.Label(frame_tab4_alm, textvariable=self.pad_var_getalm1, font=fontStyle_3) label_tab4_alm1.pack(side = tk.TOP) frame_tab4_alm.pack(side = tk.TOP, pady=10) tab4.pack() # ===================================================== # Event loop # ===================================================== notebook.add(tab1, text="Drive the mount") notebook.add(tab2, text="Calibrations") notebook.add(tab3, text="Configuration") notebook.add(tab4, text="Alarms") notebook.pack() self.tkroot.lift() self.tkroot.mainloop()
if __name__ == "__main__": example = 1 print("Example = {}".format(example)) if example == 1: # --- try to catch the Ctrl+C interrupt try: # --- We launch the pad print("Create the pad. Tk Event loop activated.") pad = Mountpad(None,"pad_dev1") # replace None by the instancied object which provides coordinates, etc. print("Pad deleted. Tk Event loop stopped") except (KeyboardInterrupt, SystemExit): pass except: raise