diff --git a/waypoint_manager/scripts/manager_GUI.py b/waypoint_manager/scripts/manager_GUI.py index 802bca5..3424fba 100755 --- a/waypoint_manager/scripts/manager_GUI.py +++ b/waypoint_manager/scripts/manager_GUI.py @@ -39,6 +39,7 @@ self.edit_menu = tk.Menu(self.menu_bar, tearoff=tk.OFF) self.edit_menu.add_command(label="Set Finish Pose", command=self.menu_set_finishpose) + self.edit_menu.add_command(label="From To", command=self.menu_from_to) self.menu_bar.add_cascade(label="Edit", menu=self.edit_menu) self.show_menu = tk.Menu(self.menu_bar, tearoff=tk.OFF) @@ -137,6 +138,7 @@ self.mymap = MyMap(Path(map_path), map_yaml) except FileNotFoundError: messagebox.showerror(title="Image file is not found", message="\""+map_yaml["image"]+"\" is not found.") + self.mymap = None return self.message("Read map file " + map_path) self.canvas.delete("all") @@ -282,6 +284,67 @@ self.message("Click any point to set finsih pose. If you want to cancel, right click anywhere.") self.setting_finish_pose = 1 return + + + """ + +++++ Edit -> From To +++++ + """ + def menu_from_to(self, event=None): + if not self.waypoints: return + sub_win = tk.Toplevel() + sub_win.title("Set parameter from some number's waypoint to any number's one") + sub_win.attributes('-topmost', True) # サブウィンドウを最前面で固定 + # + font = ("Consolas", 12) + frame1 = tk.Frame(sub_win) + from_label = tk.Label(frame1, text="From No.", font=font) + from_label.grid(row=0, column=0) + from_txt_box = tk.Entry(frame1, width=4, font=font) + from_txt_box.grid(row=0, column=1) + to_label = tk.Label(frame1, text="to No.", font=font) + to_label.grid(row=0, column=2) + to_txt_box = tk.Entry(frame1, width=4, font=font) + to_txt_box.grid(row=0, column=3) + frame1.pack(padx=10, pady=10) + # + frame2 = tk.Frame(sub_win) + name_label = tk.Label(frame2, text="Parameter", font=font) + name_label.grid(row=0, column=0) + value_label=tk.Label(frame2, text="Value", font=font) + value_label.grid(row=0, column=1) + name_txt_box = tk.Entry(frame2, width=20, font=font) + name_txt_box.grid(row=1, column=0, padx=20) + value_txt_box = tk.Entry(frame2, width=20, font=font) + value_txt_box.grid(row=1, column=1, padx=20) + frame2.pack(padx=10, pady=10) + # + def set_btn_callback(): + from_num = from_txt_box.get() + to_num = to_txt_box.get() + if (len(from_num) == 0) or (len(to_num) == 0): + messagebox.showwarning(title="Warning", message="Enter waypoint numbers.") + return + from_num = int(from_num) + to_num = int(to_num) + if (from_num < 1) or (to_num > len(self.waypoints.get_waypoint())): + messagebox.showerror(title="Error", message="Entered number is out of range of the number of waypoints") + return + param = name_txt_box.get() + value = value_txt_box.get() + if (len(param) == 0) or (len(value) == 0): + messagebox.showwarning(title="Warning", message="Enter parameter name and value") + return + for n in range(from_num, to_num+1): + self.waypoints.waypoints[n-1][param] = value + sub_win.destroy() + return + frame3 = tk.Frame(sub_win) + set_btn = tk.Button(frame3, text="Set", width=5, command=set_btn_callback) + set_btn.pack(side=tk.RIGHT, padx=50, pady=10) + cancel_btn = tk.Button(frame3, text="Cancel", width=8, command=sub_win.destroy) + cancel_btn.pack(side=tk.LEFT, padx=50, pady=10) + frame3.pack(padx=10, pady=20, expand=True, fill=tk.X) + return """