diff --git a/revpipycontrol/revpidevelop.py b/revpipycontrol/revpidevelop.py index 3bc0c59..8fa8cdb 100644 --- a/revpipycontrol/revpidevelop.py +++ b/revpipycontrol/revpidevelop.py @@ -15,7 +15,6 @@ import tkinter.messagebox as tkmsg from mytools import homedir from mytools import gettrans from mytools import savefile_developer as savefile -from revpilogfile import RevPiLogfile from tkinter import ttk from xmlrpc.client import Binary @@ -70,8 +69,6 @@ class RevPiDevelop(ttk.Frame): return None super().__init__(master) - self.master.protocol("WM_DELETE_WINDOW", self._checkclose) - self.master.bind("", self._checkclose) self.pack(expand=True, fill="both") self.revpi = revpi @@ -94,9 +91,6 @@ class RevPiDevelop(ttk.Frame): self.refresh_stats() - # Logfenster öffnen - self.tklog = RevPiLogfile(master, self.xmlcli) - def _checkclose(self, event=None): u"""Prüft ob Fenster beendet werden soll. @param event tkinter-Event""" @@ -107,18 +101,12 @@ class RevPiDevelop(ttk.Frame): self.opt["watchfiles"] = self.watchfiles _savedefaults(self.revpi, self.opt) - # Logfile und eigenes fenster schließen - self.tklog.destroy() - self.master.destroy() - def _createwidgets(self): u"""Erstellt alle Widgets.""" - self.master.wm_title(_("RevPi Python PLC program")) - self.rowconfigure(0, weight=1) self.columnconfigure(0, weight=1) - cpad = {"padx": 4, "pady": 2} + # cpad = {"padx": 4, "pady": 2} # cpade = {"padx": 4, "pady": 2, "sticky": "e"} cpadw = {"padx": 4, "pady": 2, "sticky": "w"} cpadwe = {"padx": 4, "pady": 2, "sticky": "we"} @@ -134,16 +122,16 @@ class RevPiDevelop(ttk.Frame): lbl["text"] = _("Path to list files:") lbl.grid(row=r, **cpadw) - r += 1 - self.lbl_path = ttk.Label(devel) - self.lbl_path["text"] = self.watchpath - self.lbl_path.grid(row=r, column=0, columnspan=2, **cpadw) - btn = ttk.Button(devel) btn["command"] = self.btn_selectpath btn["text"] = _("Select path") btn.grid(row=r, column=1, **cpadw) + r += 1 + self.lbl_path = ttk.Label(devel) + self.lbl_path["width"] = 50 + self.lbl_path.grid(row=r, column=0, columnspan=2, **cpadw) + # Listbox r += 1 trv = ttk.Frame(devel) @@ -164,27 +152,11 @@ class RevPiDevelop(ttk.Frame): btnlist.columnconfigure(1, weight=1) btnlist.grid(row=r, columnspan=2, sticky="we") - btn = ttk.Button(btnlist) - btn["command"] = lambda: self.xmlcli.plcstop() - btn["text"] = _("Just stop PLC") - btn.grid(row=0, column=0, **cpadwe) - self.btn_jobs = ttk.Button(btnlist) self.btn_jobs["command"] = self.btn_domyjob self.btn_jobs["text"] = _("Stop / Upload / Start") self.btn_jobs.grid(row=0, column=1, **cpadwe) - btn = ttk.Button(btnlist) - btn["command"] = lambda: self.xmlcli.plcstart() - btn["text"] = _("Just start PLC") - btn.grid(row=0, column=2, **cpadwe) - - # Beendenbutton - btn = ttk.Button(self) - btn["command"] = self._checkclose - btn["text"] = _("Exit") - btn.grid(**cpad) - def btn_domyjob(self): u"""Hochladen und neu starten.""" diff --git a/revpipycontrol/revpipycontrol.py b/revpipycontrol/revpipycontrol.py index 7736aa9..1a5d023 100755 --- a/revpipycontrol/revpipycontrol.py +++ b/revpipycontrol/revpipycontrol.py @@ -48,12 +48,12 @@ class RevPiPyControl(tkinter.Frame): self.xmlfuncs = [] self.xmlmode = 0 - # Debugger vorbereiten + # Frames vorbereiten self.debugframe = None + self.developframe = None # Globale Fenster self.tkcheckclient = None - self.tkdevelop = None self.tklogs = None self.tkoptions = None self.tkprogram = None @@ -77,8 +77,10 @@ class RevPiPyControl(tkinter.Frame): u"""Schließt alle Fenster.""" if self.tkcheckclient is not None: self.tkcheckclient.destroy() - if self.tkdevelop is not None: - self.tkdevelop.destroy() + if self.developframe is not None: + self.developframe._checkclose() + self.developframe.destroy() + self.developframe = None if self.tklogs is not None: self.tklogs.master.destroy() if self.tkoptions is not None: @@ -129,38 +131,43 @@ class RevPiPyControl(tkinter.Frame): menu1.add_command(label=_("Info..."), command=self.infowindow) self.mbar.add_cascade(label=_("Help"), menu=menu1) - self.var_conn = tkinter.StringVar(self) - self.txt_connect = tkinter.Entry(self, state="readonly", width=40) + self.main_frame = tkinter.Frame(self) + self.main_frame.pack(side="left", fill="y") + + self.var_conn = tkinter.StringVar(self.main_frame) + self.txt_connect = tkinter.Entry( + self.main_frame, state="readonly", width=40 + ) self.txt_connect["textvariable"] = self.var_conn self.txt_connect.pack(fill="x") - self.btn_plcstart = tkinter.Button(self) + self.btn_plcstart = tkinter.Button(self.main_frame) self.btn_plcstart["text"] = _("PLC start") self.btn_plcstart["command"] = self.plcstart self.btn_plcstart.pack(fill="x") - self.btn_plcstop = tkinter.Button(self) + self.btn_plcstop = tkinter.Button(self.main_frame) self.btn_plcstop["text"] = _("PLC stop") self.btn_plcstop["command"] = self.plcstop self.btn_plcstop.pack(fill="x") - self.btn_plcrestart = tkinter.Button(self) + self.btn_plcrestart = tkinter.Button(self.main_frame) self.btn_plcrestart["text"] = _("PLC restart") self.btn_plcrestart["command"] = self.plcrestart self.btn_plcrestart.pack(fill="x") - self.btn_plclogs = tkinter.Button(self) + self.btn_plclogs = tkinter.Button(self.main_frame) self.btn_plclogs["text"] = _("PLC logs") self.btn_plclogs["command"] = self.plclogs self.btn_plclogs.pack(fill="x") - self.var_status = tkinter.StringVar(self) - self.txt_status = tkinter.Entry(self) + self.var_status = tkinter.StringVar(self.main_frame) + self.txt_status = tkinter.Entry(self.main_frame) self.txt_status["state"] = "readonly" self.txt_status["textvariable"] = self.var_status self.txt_status.pack(fill="x") - self.btn_debug = tkinter.Button(self) + self.btn_debug = tkinter.Button(self.main_frame) self.btn_debug["text"] = _("PLC watch mode") self.btn_debug["command"] = self.plcdebug self.btn_debug.pack(fill="x") @@ -200,7 +207,7 @@ class RevPiPyControl(tkinter.Frame): @param text Verbindungsname @param reconnect Socket Timeout nicht heruntersetzen""" if reconnect: - socket.setdefaulttimeout(10) + socket.setdefaulttimeout(6) else: socket.setdefaulttimeout(2) @@ -218,7 +225,7 @@ class RevPiPyControl(tkinter.Frame): self.servererror() else: self._closeall() - socket.setdefaulttimeout(10) + socket.setdefaulttimeout(6) self.cli = ServerProxy( "http://{}:{}".format( self.dict_conn[text][0], int(self.dict_conn[text][1]) @@ -255,38 +262,40 @@ class RevPiPyControl(tkinter.Frame): "").format(self.cli.version()), parent=self.master ) + return + + # Debugframe laden + # FIXME: Bei neuer piCtory Konfig schneller vernichten + if self.debugframe is None \ + or self.debugframe.err_workvalues >= \ + self.debugframe.max_errors: + try: + self.debugframe = revpicheckclient.RevPiCheckClient( + self.main_frame, self.cli, self.xmlmode + ) + except: + tkmsg.showwarning( + _("Error"), + _("Can not load piCtory configuration. \n" + "Did you create a hardware configuration? " + "Please check this in piCtory!"), + parent=self.master + ) + self.btn_debug["state"] = "normal" + return None + + # Show/Hide wechseln + if self.debugframe.winfo_viewable(): + self.debugframe.hideallwindows() + if self.debugframe.autorw.get(): + self.debugframe.autorw.set(False) + self.debugframe.toggleauto() + self.debugframe.dowrite.set(False) + self.debugframe.pack_forget() else: - # Debugfenster laden - if self.debugframe is None \ - or self.debugframe.err_workvalues >= \ - self.debugframe.max_errors: - try: - self.debugframe = revpicheckclient.RevPiCheckClient( - self, self.cli, self.xmlmode - ) - except: - tkmsg.showwarning( - _("Error"), - _("Can not load piCtory configuration. \n" - "Did you create a hardware configuration? " - "Please check this in piCtory!"), - parent=self.master - ) - self.btn_debug["state"] = "normal" - return None + self.debugframe.pack(fill="x") - # Show/Hide wechseln - if self.debugframe.winfo_viewable(): - self.debugframe.hideallwindows() - if self.debugframe.autorw.get(): - self.debugframe.autorw.set(False) - self.debugframe.toggleauto() - self.debugframe.dowrite.set(False) - self.debugframe.pack_forget() - else: - self.debugframe.pack(fill="x") - - self.btn_debug["state"] = "normal" + self.btn_debug["state"] = "normal" def plcdevelop(self): u"""Startet das Developfenster.""" @@ -297,17 +306,19 @@ class RevPiPyControl(tkinter.Frame): "configuration is too small to access this dialog!"), parent=self.master ) - else: - # Logfenster schließen - if self.tklogs is not None: - self.tklogs.master.destroy() + return - win = tkinter.Toplevel(self) - win.focus_set() - win.grab_set() - self.tkdevelop = revpidevelop.RevPiDevelop( - win, self.cli, self.xmlmode, self.revpiname) - self.wait_window(win) + # Developframe laden + if self.developframe is None: + self.developframe = revpidevelop.RevPiDevelop( + self, self.cli, self.xmlmode, self.revpiname + ) + + if self.developframe.winfo_viewable(): + self.developframe._checkclose() + self.developframe.pack_forget() + else: + self.developframe.pack(side="right") # fill="x") def plclist(self): u"""Öffnet das Fenster für die Verbindungen."""