Okienko zmiany narzędzia – dodawanie własnego GUI do Axisa
Plik /usr/bin/axis po funkcji parse_gcode_expression(e) a przed definicją klasy _prompt_areyousure
wstawiamy nasą klasę:
class _prompt_tool: """ Prompt for new tool number""" def __init__(self, title, text): t = self.t = Toplevel(root_window, padx=7, pady=7) t.wm_title(title) t.wm_transient(root_window) t.wm_resizable(0, 0) m = Message(t, text=text, aspect=500, anchor="w", justify="left") self.w = w = StringVar(t) l = Tkinter.Message(t, textvariable=w, justify="left", anchor="w", aspect=500) self.inputs = fi = Tkinter.Frame(t) self.v1 = v1 = StringVar(fi) l1 = Label(fi, text=_("New tool:")) self.e1 = e1 = Entry(fi, textvariable=v1) #e1.configure(takefocus=1) self.buttons = f = Tkinter.Frame(t) self.ok = Tkinter.Button(f, text=_("Ok"), command=self.do_ok, width=10,height=1,padx=0,pady=.25, default="active") self.cancel = Tkinter.Button(f, text=_("Cancel"), command=self.do_cancel, width=10,height=1,padx=0,pady=.25, default="normal") m.pack(side="top", anchor="w") l.pack(side="top", anchor="w", fill="x", expand=1) l1.pack(side="top", anchor="w") e1.pack(side="top", anchor="e") fi.pack(side="top", anchor="e") f.pack(side="bottom", anchor="e") self.ok.pack(side="left", padx=3, pady=3) self.cancel.pack(side="left", padx=3, pady=3) t.wm_protocol("WM_DELETE_WINDOW", self.cancel.invoke) t.bind("<Return>", lambda event: (self.ok.flash(), self.ok.invoke())) t.bind("<KP_Enter>", lambda event: (self.ok.flash(), self.ok.invoke())) t.bind("<Escape>", lambda event: (self.cancel.flash(), self.cancel.invoke())) def do_ok(self): self.status=True self.t.destroy() def do_cancel(self): self.status=False self.t.destroy() def result(self): return (self.v1.get()) def do_focus(self): print("do focus") if not self.e1.winfo_viewable(): self._after = self.t.after(10, self.do_focus) else: self.e1.focus() self.e1.selection_range(0, "end") self._after = None def run(self): self.t.grab_set() self._after = self.t.after_idle(self.do_focus) self.t.wait_window() try: self.t.destroy() except Tkinter.TclError: pass return self.result() def prompt_tool(title, text): t = _prompt_tool(title, text) return t.run()
(tak, def prompt_tool(title, text) jest już poza definicją klasy)
Niżej – po funkcji clear_offset a przed touch_off wstawiamy naszą funkcję:
def select_tool(event=None, new_tool = None): new_tool = prompt_tool(_("Select tool:"), _("Select tool:")) ensure_mode(linuxcnc.MODE_MDI) s.poll() tool_command = "M6 T%s G43" % new_tool c.mdi(tool_command) c.wait_complete() ensure_mode(linuxcnc.MODE_MANUAL) s.poll() o.tkRedraw()
W pliku /usr/share/axis/tcl/axis.tcl
po setup_widget_accel $_tabs_manual.jogf.zerohome.zero [_ „Touch Off”]
dodajemy nasz button:
button $_tabs_manual.jogf.zerohome.tool -command select_tool -padx 2m -pady 0 setup_widget_accel $_tabs_manual.jogf.zerohome.tool [_ "Set tool"]
a niżej po bloku zaczynającym się od grid $_tabs_manual.jogf.zerohome.zero
dodajemy nasz blok:
grid $_tabs_manual.jogf.zerohome.tool -column 1 -row 1 -ipadx 2 -pady 2 -sticky w
W ten sposób dodaliśmy do Axisa nowy przycisk wywołujący naszą funkcję prompt_tool
Teraz w ~/.axisrc dodajemy sobie nasz skrót klawiszowy (u nas jest to Control-n)
root_window.bind("<Control-n>", commands.select_tool)
i już.
Napisaliśmy własną funkcję, dodaliśmy ją do GUI i podpięliśmy do skrótu klawiszowego. Jak to mówią amerykanie: 'nie próbujcie tego pod Machem’ 🙂