import tkinter as tk from tkinter.ttk import Progressbar import pyglet class CalibrationPopUp(tk.Frame): def __init__(self, root, calibration_state, conf): self.root = root self.font = pyglet.font.add_file("gui/SourceSansPro-Semibold.otf") self.calibration_state = calibration_state tk.Frame.__init__(self, root) self.pendingClose = False self.conf = conf self.instruction = tk.Label(self,text="Start Calibration", anchor="c",font=("SourceSansPro-Semibold", 18)) self.instruction.pack(side="top", fill="both", expand=True) button = tk.Button(self,text="OK", command=self.calibration_state.next_state_gui, anchor="c",height=1,width=5) button.pack(side="top", fill="both", expand=True) self.cs = Progressbar(self, orient='horizontal', mode='determinate') self.cs.pack(side="top", fill="both", expand=True) root.bind('', self.close) def update(self): if not self.root.winfo_exists(): return # display captured value count as progress self.cs['value'] = self.calibration_state.progress # read state from state machine if self.calibration_state.get_state() == self.calibration_state.WAITING_POS_1: text = "Move gondola to [" + self.conf["ac_sensor"]["calibration_x_offset"] + " , " + self.conf["ac_sensor"]["calibration_y_offset_1"] + "]!" self.instruction["text"] = text elif self.calibration_state.get_state() == self.calibration_state.WAITING_POS_2: text = "Move gondola to [" + self.conf["ac_sensor"]["calibration_x_offset"] + " , " + self.conf["ac_sensor"]["calibration_y_offset_2"] + "]!" self.instruction["text"] = text elif self.calibration_state.get_state() == self.calibration_state.CALIBRATION_DONE: self.instruction["text"] = "Calibration Done!" if not self.pendingClose: self.pendingClose = True self.root.after(1500, self.close) else: self.instruction["text"] = "Processing..." def close(self): if self.root.winfo_exists(): self.root.destroy()