mirror of
https://github.com/naruxde/revpipycontrol.git
synced 2025-11-08 15:43:52 +01:00
Developer als Frame zu Hauptfenster gelegt
Sockettimeout auf 6 Sekunden ver?ndert
This commit is contained in:
@@ -15,7 +15,6 @@ import tkinter.messagebox as tkmsg
|
|||||||
from mytools import homedir
|
from mytools import homedir
|
||||||
from mytools import gettrans
|
from mytools import gettrans
|
||||||
from mytools import savefile_developer as savefile
|
from mytools import savefile_developer as savefile
|
||||||
from revpilogfile import RevPiLogfile
|
|
||||||
from tkinter import ttk
|
from tkinter import ttk
|
||||||
from xmlrpc.client import Binary
|
from xmlrpc.client import Binary
|
||||||
|
|
||||||
@@ -70,8 +69,6 @@ class RevPiDevelop(ttk.Frame):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
super().__init__(master)
|
super().__init__(master)
|
||||||
self.master.protocol("WM_DELETE_WINDOW", self._checkclose)
|
|
||||||
self.master.bind("<KeyPress-Escape>", self._checkclose)
|
|
||||||
self.pack(expand=True, fill="both")
|
self.pack(expand=True, fill="both")
|
||||||
|
|
||||||
self.revpi = revpi
|
self.revpi = revpi
|
||||||
@@ -94,9 +91,6 @@ class RevPiDevelop(ttk.Frame):
|
|||||||
|
|
||||||
self.refresh_stats()
|
self.refresh_stats()
|
||||||
|
|
||||||
# Logfenster öffnen
|
|
||||||
self.tklog = RevPiLogfile(master, self.xmlcli)
|
|
||||||
|
|
||||||
def _checkclose(self, event=None):
|
def _checkclose(self, event=None):
|
||||||
u"""Prüft ob Fenster beendet werden soll.
|
u"""Prüft ob Fenster beendet werden soll.
|
||||||
@param event tkinter-Event"""
|
@param event tkinter-Event"""
|
||||||
@@ -107,18 +101,12 @@ class RevPiDevelop(ttk.Frame):
|
|||||||
self.opt["watchfiles"] = self.watchfiles
|
self.opt["watchfiles"] = self.watchfiles
|
||||||
_savedefaults(self.revpi, self.opt)
|
_savedefaults(self.revpi, self.opt)
|
||||||
|
|
||||||
# Logfile und eigenes fenster schließen
|
|
||||||
self.tklog.destroy()
|
|
||||||
self.master.destroy()
|
|
||||||
|
|
||||||
def _createwidgets(self):
|
def _createwidgets(self):
|
||||||
u"""Erstellt alle Widgets."""
|
u"""Erstellt alle Widgets."""
|
||||||
self.master.wm_title(_("RevPi Python PLC program"))
|
|
||||||
|
|
||||||
self.rowconfigure(0, weight=1)
|
self.rowconfigure(0, weight=1)
|
||||||
self.columnconfigure(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"}
|
# cpade = {"padx": 4, "pady": 2, "sticky": "e"}
|
||||||
cpadw = {"padx": 4, "pady": 2, "sticky": "w"}
|
cpadw = {"padx": 4, "pady": 2, "sticky": "w"}
|
||||||
cpadwe = {"padx": 4, "pady": 2, "sticky": "we"}
|
cpadwe = {"padx": 4, "pady": 2, "sticky": "we"}
|
||||||
@@ -134,16 +122,16 @@ class RevPiDevelop(ttk.Frame):
|
|||||||
lbl["text"] = _("Path to list files:")
|
lbl["text"] = _("Path to list files:")
|
||||||
lbl.grid(row=r, **cpadw)
|
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 = ttk.Button(devel)
|
||||||
btn["command"] = self.btn_selectpath
|
btn["command"] = self.btn_selectpath
|
||||||
btn["text"] = _("Select path")
|
btn["text"] = _("Select path")
|
||||||
btn.grid(row=r, column=1, **cpadw)
|
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
|
# Listbox
|
||||||
r += 1
|
r += 1
|
||||||
trv = ttk.Frame(devel)
|
trv = ttk.Frame(devel)
|
||||||
@@ -164,27 +152,11 @@ class RevPiDevelop(ttk.Frame):
|
|||||||
btnlist.columnconfigure(1, weight=1)
|
btnlist.columnconfigure(1, weight=1)
|
||||||
btnlist.grid(row=r, columnspan=2, sticky="we")
|
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 = ttk.Button(btnlist)
|
||||||
self.btn_jobs["command"] = self.btn_domyjob
|
self.btn_jobs["command"] = self.btn_domyjob
|
||||||
self.btn_jobs["text"] = _("Stop / Upload / Start")
|
self.btn_jobs["text"] = _("Stop / Upload / Start")
|
||||||
self.btn_jobs.grid(row=0, column=1, **cpadwe)
|
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):
|
def btn_domyjob(self):
|
||||||
u"""Hochladen und neu starten."""
|
u"""Hochladen und neu starten."""
|
||||||
|
|
||||||
|
|||||||
@@ -48,12 +48,12 @@ class RevPiPyControl(tkinter.Frame):
|
|||||||
self.xmlfuncs = []
|
self.xmlfuncs = []
|
||||||
self.xmlmode = 0
|
self.xmlmode = 0
|
||||||
|
|
||||||
# Debugger vorbereiten
|
# Frames vorbereiten
|
||||||
self.debugframe = None
|
self.debugframe = None
|
||||||
|
self.developframe = None
|
||||||
|
|
||||||
# Globale Fenster
|
# Globale Fenster
|
||||||
self.tkcheckclient = None
|
self.tkcheckclient = None
|
||||||
self.tkdevelop = None
|
|
||||||
self.tklogs = None
|
self.tklogs = None
|
||||||
self.tkoptions = None
|
self.tkoptions = None
|
||||||
self.tkprogram = None
|
self.tkprogram = None
|
||||||
@@ -77,8 +77,10 @@ class RevPiPyControl(tkinter.Frame):
|
|||||||
u"""Schließt alle Fenster."""
|
u"""Schließt alle Fenster."""
|
||||||
if self.tkcheckclient is not None:
|
if self.tkcheckclient is not None:
|
||||||
self.tkcheckclient.destroy()
|
self.tkcheckclient.destroy()
|
||||||
if self.tkdevelop is not None:
|
if self.developframe is not None:
|
||||||
self.tkdevelop.destroy()
|
self.developframe._checkclose()
|
||||||
|
self.developframe.destroy()
|
||||||
|
self.developframe = None
|
||||||
if self.tklogs is not None:
|
if self.tklogs is not None:
|
||||||
self.tklogs.master.destroy()
|
self.tklogs.master.destroy()
|
||||||
if self.tkoptions is not None:
|
if self.tkoptions is not None:
|
||||||
@@ -129,38 +131,43 @@ class RevPiPyControl(tkinter.Frame):
|
|||||||
menu1.add_command(label=_("Info..."), command=self.infowindow)
|
menu1.add_command(label=_("Info..."), command=self.infowindow)
|
||||||
self.mbar.add_cascade(label=_("Help"), menu=menu1)
|
self.mbar.add_cascade(label=_("Help"), menu=menu1)
|
||||||
|
|
||||||
self.var_conn = tkinter.StringVar(self)
|
self.main_frame = tkinter.Frame(self)
|
||||||
self.txt_connect = tkinter.Entry(self, state="readonly", width=40)
|
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["textvariable"] = self.var_conn
|
||||||
self.txt_connect.pack(fill="x")
|
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["text"] = _("PLC start")
|
||||||
self.btn_plcstart["command"] = self.plcstart
|
self.btn_plcstart["command"] = self.plcstart
|
||||||
self.btn_plcstart.pack(fill="x")
|
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["text"] = _("PLC stop")
|
||||||
self.btn_plcstop["command"] = self.plcstop
|
self.btn_plcstop["command"] = self.plcstop
|
||||||
self.btn_plcstop.pack(fill="x")
|
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["text"] = _("PLC restart")
|
||||||
self.btn_plcrestart["command"] = self.plcrestart
|
self.btn_plcrestart["command"] = self.plcrestart
|
||||||
self.btn_plcrestart.pack(fill="x")
|
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["text"] = _("PLC logs")
|
||||||
self.btn_plclogs["command"] = self.plclogs
|
self.btn_plclogs["command"] = self.plclogs
|
||||||
self.btn_plclogs.pack(fill="x")
|
self.btn_plclogs.pack(fill="x")
|
||||||
|
|
||||||
self.var_status = tkinter.StringVar(self)
|
self.var_status = tkinter.StringVar(self.main_frame)
|
||||||
self.txt_status = tkinter.Entry(self)
|
self.txt_status = tkinter.Entry(self.main_frame)
|
||||||
self.txt_status["state"] = "readonly"
|
self.txt_status["state"] = "readonly"
|
||||||
self.txt_status["textvariable"] = self.var_status
|
self.txt_status["textvariable"] = self.var_status
|
||||||
self.txt_status.pack(fill="x")
|
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["text"] = _("PLC watch mode")
|
||||||
self.btn_debug["command"] = self.plcdebug
|
self.btn_debug["command"] = self.plcdebug
|
||||||
self.btn_debug.pack(fill="x")
|
self.btn_debug.pack(fill="x")
|
||||||
@@ -200,7 +207,7 @@ class RevPiPyControl(tkinter.Frame):
|
|||||||
@param text Verbindungsname
|
@param text Verbindungsname
|
||||||
@param reconnect Socket Timeout nicht heruntersetzen"""
|
@param reconnect Socket Timeout nicht heruntersetzen"""
|
||||||
if reconnect:
|
if reconnect:
|
||||||
socket.setdefaulttimeout(10)
|
socket.setdefaulttimeout(6)
|
||||||
else:
|
else:
|
||||||
socket.setdefaulttimeout(2)
|
socket.setdefaulttimeout(2)
|
||||||
|
|
||||||
@@ -218,7 +225,7 @@ class RevPiPyControl(tkinter.Frame):
|
|||||||
self.servererror()
|
self.servererror()
|
||||||
else:
|
else:
|
||||||
self._closeall()
|
self._closeall()
|
||||||
socket.setdefaulttimeout(10)
|
socket.setdefaulttimeout(6)
|
||||||
self.cli = ServerProxy(
|
self.cli = ServerProxy(
|
||||||
"http://{}:{}".format(
|
"http://{}:{}".format(
|
||||||
self.dict_conn[text][0], int(self.dict_conn[text][1])
|
self.dict_conn[text][0], int(self.dict_conn[text][1])
|
||||||
@@ -255,38 +262,40 @@ class RevPiPyControl(tkinter.Frame):
|
|||||||
"").format(self.cli.version()),
|
"").format(self.cli.version()),
|
||||||
parent=self.master
|
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:
|
else:
|
||||||
# Debugfenster laden
|
self.debugframe.pack(fill="x")
|
||||||
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
|
|
||||||
|
|
||||||
# Show/Hide wechseln
|
self.btn_debug["state"] = "normal"
|
||||||
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"
|
|
||||||
|
|
||||||
def plcdevelop(self):
|
def plcdevelop(self):
|
||||||
u"""Startet das Developfenster."""
|
u"""Startet das Developfenster."""
|
||||||
@@ -297,17 +306,19 @@ class RevPiPyControl(tkinter.Frame):
|
|||||||
"configuration is too small to access this dialog!"),
|
"configuration is too small to access this dialog!"),
|
||||||
parent=self.master
|
parent=self.master
|
||||||
)
|
)
|
||||||
else:
|
return
|
||||||
# Logfenster schließen
|
|
||||||
if self.tklogs is not None:
|
|
||||||
self.tklogs.master.destroy()
|
|
||||||
|
|
||||||
win = tkinter.Toplevel(self)
|
# Developframe laden
|
||||||
win.focus_set()
|
if self.developframe is None:
|
||||||
win.grab_set()
|
self.developframe = revpidevelop.RevPiDevelop(
|
||||||
self.tkdevelop = revpidevelop.RevPiDevelop(
|
self, self.cli, self.xmlmode, self.revpiname
|
||||||
win, self.cli, self.xmlmode, self.revpiname)
|
)
|
||||||
self.wait_window(win)
|
|
||||||
|
if self.developframe.winfo_viewable():
|
||||||
|
self.developframe._checkclose()
|
||||||
|
self.developframe.pack_forget()
|
||||||
|
else:
|
||||||
|
self.developframe.pack(side="right") # fill="x")
|
||||||
|
|
||||||
def plclist(self):
|
def plclist(self):
|
||||||
u"""Öffnet das Fenster für die Verbindungen."""
|
u"""Öffnet das Fenster für die Verbindungen."""
|
||||||
|
|||||||
Reference in New Issue
Block a user