1
0
mirror of https://github.com/naruxde/revpipycontrol.git synced 2025-11-08 15:43:52 +01:00

Sortierung der Devices beibehalten

RevPiOption Einstellungen in globalem dc
RevPiOption Interaktion bei Meldungen verbessert
RevPiCheckClient auf kleine xml Einstellungen angepasst
RevPiInfo Text-Feld angepasst auf kleine xml Einstellung
bugfix: RevPiPyControl.serverdisconnect()
bugfix: RevPiCheckClient Doppelter Timerstart verhindert
This commit is contained in:
2017-07-01 16:08:11 +02:00
parent 0653c6c8eb
commit 145468d35b
7 changed files with 167 additions and 92 deletions

View File

@@ -88,6 +88,9 @@ Methods</h3>
<td><a style="color:#0000FF" href="#RevPiCheckClient.refreshvalues">refreshvalues</a></td>
<td>Ruft alle IO Werte von RevPi ab und aktualisiert Fenster.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiCheckClient.tmr_workvalues">tmr_workvalues</a></td>
<td>Timer f&#252;r zyklische Abfrage.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiCheckClient.toggleauto">toggleauto</a></td>
<td>Schaltet zwischen Autorefresh um und aktualisiert Widgets.</td>
</tr><tr>
@@ -240,7 +243,18 @@ RevPiCheckClient.refreshvalues</h3>
<b>refreshvalues</b>(<i></i>)
<p>
Ruft alle IO Werte von RevPi ab und aktualisiert Fenster.
</p><a NAME="RevPiCheckClient.toggleauto" ID="RevPiCheckClient.toggleauto"></a>
</p><a NAME="RevPiCheckClient.tmr_workvalues" ID="RevPiCheckClient.tmr_workvalues"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiCheckClient.tmr_workvalues</h3>
<b>tmr_workvalues</b>(<i></i>)
<p>
Timer f&#252;r zyklische Abfrage.
</p><dl>
<dt>Returns:</dt>
<dd>
None
</dd>
</dl><a NAME="RevPiCheckClient.toggleauto" ID="RevPiCheckClient.toggleauto"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiCheckClient.toggleauto</h3>
<b>toggleauto</b>(<i></i>)

View File

@@ -67,7 +67,10 @@ Methods</h3>
<td><a style="color:#0000FF" href="#RevPiOption.askxmlon">askxmlon</a></td>
<td>Fragt Nuter, ob wirklicht abgeschaltet werden soll.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiOption.xmlmods">xmlmods</a></td>
<td><a style="color:#0000FF" href="#RevPiOption.xmlmod2_tail">xmlmod2_tail</a></td>
<td>Passt XML-Optionszugriff an.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiOption.xmlmod_tail">xmlmod_tail</a></td>
<td>Passt XML-Optionszugriff an.</td>
</tr>
</table>
@@ -79,7 +82,7 @@ Static Methods</h3>
<a NAME="RevPiOption.__init__" ID="RevPiOption.__init__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiOption (Constructor)</h3>
<b>RevPiOption</b>(<i>master, xmlcli, xmlmode</i>)
<b>RevPiOption</b>(<i>master, xmlcli</i>)
<p>
Init RevPiOption-Class.
</p><dl>
@@ -118,10 +121,15 @@ Erstellt Widgets.
</p><a NAME="RevPiOption._loadappdata" ID="RevPiOption._loadappdata"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiOption._loadappdata</h3>
<b>_loadappdata</b>(<i></i>)
<b>_loadappdata</b>(<i>refresh=False</i>)
<p>
L&#228;d aktuelle Einstellungen vom RevPi.
</p><a NAME="RevPiOption._setappdata" ID="RevPiOption._setappdata"></a>
</p><dl>
<dt><i>refresh</i></dt>
<dd>
Wenn True, werden Einstellungen heruntergeladen.
</dd>
</dl><a NAME="RevPiOption._setappdata" ID="RevPiOption._setappdata"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiOption._setappdata</h3>
<b>_setappdata</b>(<i></i>)
@@ -133,10 +141,16 @@ RevPiOption.askxmlon</h3>
<b>askxmlon</b>(<i></i>)
<p>
Fragt Nuter, ob wirklicht abgeschaltet werden soll.
</p><a NAME="RevPiOption.xmlmods" ID="RevPiOption.xmlmods"></a>
</p><a NAME="RevPiOption.xmlmod2_tail" ID="RevPiOption.xmlmod2_tail"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiOption.xmlmods</h3>
<b>xmlmods</b>(<i></i>)
RevPiOption.xmlmod2_tail</h3>
<b>xmlmod2_tail</b>(<i></i>)
<p>
Passt XML-Optionszugriff an.
</p><a NAME="RevPiOption.xmlmod_tail" ID="RevPiOption.xmlmod_tail"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiOption.xmlmod_tail</h3>
<b>xmlmod_tail</b>(<i></i>)
<p>
Passt XML-Optionszugriff an.
</p>

View File

@@ -13,6 +13,7 @@ revpicheckclient.RevPiCheckClient._workvalues?5(io_dicts=None, writeout=False)
revpicheckclient.RevPiCheckClient.hideallwindows?4()
revpicheckclient.RevPiCheckClient.readvalues?4()
revpicheckclient.RevPiCheckClient.refreshvalues?4()
revpicheckclient.RevPiCheckClient.tmr_workvalues?4()
revpicheckclient.RevPiCheckClient.toggleauto?4()
revpicheckclient.RevPiCheckClient.togglewrite?4()
revpicheckclient.RevPiCheckClient.validatereturn?4(returnlist)
@@ -39,11 +40,12 @@ revpilogfile._?8
revpioption.RevPiOption._changesdone?5()
revpioption.RevPiOption._checkclose?5(event=None)
revpioption.RevPiOption._createwidgets?5()
revpioption.RevPiOption._loadappdata?5()
revpioption.RevPiOption._loadappdata?5(refresh=False)
revpioption.RevPiOption._setappdata?5()
revpioption.RevPiOption.askxmlon?4()
revpioption.RevPiOption.xmlmods?4()
revpioption.RevPiOption?1(master, xmlcli, xmlmode)
revpioption.RevPiOption.xmlmod2_tail?4()
revpioption.RevPiOption.xmlmod_tail?4()
revpioption.RevPiOption?1(master, xmlcli)
revpioption._?8
revpiplclist.RevPiPlcList._checkclose?5(event=None)
revpiplclist.RevPiPlcList._createwidgets?5()

View File

@@ -28,7 +28,9 @@ class RevPiCheckClient(tkinter.Frame):
self.xmlmode = xmlmode
self.cli = xmlcli
self.cli.psstart()
self.dict_devices = {v[0]: v[1] for v in self.cli.ps_devices()}
self.lst_devices = self.cli.ps_devices()
self.dict_devices = {v[0]: v[1] for v in self.lst_devices}
self.lst_devices = [d[0] for d in self.lst_devices]
self.dict_inps = pickle.loads(self.cli.ps_inps().data)
self.dict_outs = pickle.loads(self.cli.ps_outs().data)
@@ -202,7 +204,7 @@ class RevPiCheckClient(tkinter.Frame):
devgrp["text"] = _("Devices of RevPi")
devgrp.pack(fill="y", side="left")
for dev in self.dict_devices:
for dev in self.lst_devices:
win = tkinter.Toplevel(self)
win.wm_title(self.dict_devices[dev])
win.protocol(
@@ -245,15 +247,17 @@ class RevPiCheckClient(tkinter.Frame):
self.btn_read.pack(fill="x")
self.btn_write = tkinter.Button(cntgrp)
self.btn_write["state"] = "normal" if self.xmlmode >= 3 \
else "disabled"
self.btn_write["text"] = _("Write Outputs")
self.btn_write["command"] = self.writevalues
self.btn_write.pack(fill="x")
check = tkinter.Checkbutton(cntgrp)
check["command"] = self.toggleauto
check["text"] = _("Autorefresh values")
check["variable"] = self.autorw
check.pack(anchor="w")
self.chk_auto = tkinter.Checkbutton(cntgrp)
self.chk_auto["command"] = self.toggleauto
self.chk_auto["text"] = _("Autorefresh values")
self.chk_auto["variable"] = self.autorw
self.chk_auto.pack(anchor="w")
self.chk_dowrite = tkinter.Checkbutton(cntgrp)
self.chk_dowrite["command"] = self.togglewrite
@@ -335,9 +339,6 @@ class RevPiCheckClient(tkinter.Frame):
with self.lk:
self.validatereturn(xmlmc())
if self.autorw.get():
self.master.after(200, self._workvalues)
def hideallwindows(self):
u"""Versteckt alle Fenster."""
for win in self.dict_wins:
@@ -353,19 +354,35 @@ class RevPiCheckClient(tkinter.Frame):
if not self.autorw.get():
self._workvalues()
def tmr_workvalues(self):
u"""Timer für zyklische Abfrage.
@return None"""
# Verbleibener Timer könnte schon ungültig sein
if not self.autorw.get():
try:
self.chk_auto["state"] = "normal"
except:
pass
return None
self._workvalues()
self.master.after(200, self.tmr_workvalues)
def toggleauto(self):
u"""Schaltet zwischen Autorefresh um und aktualisiert Widgets."""
stateval = "disabled" if self.autorw.get() else "normal"
self.btn_refresh["state"] = stateval
self.btn_read["state"] = stateval
self.btn_write["state"] = stateval
self.btn_write["state"] = stateval if self.xmlmode >= 3 \
else "disabled"
self.chk_dowrite["state"] = "normal" if self.xmlmode >= 3 \
and self.autorw.get() else "disabled"
if self.autorw.get():
self._workvalues()
self.tmr_workvalues()
else:
self.chk_auto["state"] = "disabled"
self.dowrite.set(False)
def togglewrite(self):

View File

@@ -112,23 +112,25 @@ class RevPiInfo(tkinter.Frame):
# Rechte Seite Mittelframe ---------------
# Funktionen der Gegenstelle
frame_func = tkinter.Frame(frame_main)
txt_xmlfunc = tkinter.Text(frame_func, width=30, height=15)
scr_xmlfunc = tkinter.Scrollbar(frame_func)
if extended:
txt_xmlfunc.insert(tkinter.END, "\n".join(
[] if self.xmlcli is None else self.xmlcli.system.listMethods()
))
else:
txt_xmlfunc.insert(tkinter.END, "\n".join(
[] if self.xmlcli is None else self.xmlcli.get_filelist()
))
txt_xmlfunc["yscrollcommand"] = scr_xmlfunc.set
txt_xmlfunc["state"] = "disabled"
scr_xmlfunc["command"] = txt_xmlfunc.yview
txt_xmlfunc.pack(side="left")
scr_xmlfunc.pack(fill="y", side="right")
frame_func.grid(column=3, row=0, rowspan=int_row + 1, **cpadnw)
if self.xmlcli is not None:
frame_func = tkinter.Frame(frame_main)
txt_xmlfunc = tkinter.Text(frame_func, width=30, height=15)
scr_xmlfunc = tkinter.Scrollbar(frame_func)
if extended:
txt_xmlfunc.insert(tkinter.END, "\n".join(
self.xmlcli.system.listMethods()
))
elif "get_filelist" in self.xmlcli.system.listMethods():
txt_xmlfunc.insert(tkinter.END, "\n".join(
self.xmlcli.get_filelist()
))
txt_xmlfunc["yscrollcommand"] = scr_xmlfunc.set
txt_xmlfunc["state"] = "disabled"
scr_xmlfunc["command"] = txt_xmlfunc.yview
txt_xmlfunc.pack(side="left")
scr_xmlfunc.pack(fill="y", side="right")
if txt_xmlfunc.get(1.0) != "\n":
frame_func.grid(column=3, row=0, rowspan=int_row + 1, **cpadnw)
# Unten Beenden-Button -----------------------------------------------
self.btnapplog = tkinter.Button(self)

View File

@@ -15,10 +15,13 @@ _ = gettrans()
class RevPiOption(tkinter.Frame):
def __init__(self, master, xmlcli, xmlmode):
def __init__(self, master, xmlcli):
u"""Init RevPiOption-Class.
@return None"""
if xmlmode < 2:
try:
self.dc = xmlcli.get_config()
except:
self.dc = None
return None
super().__init__(master)
@@ -27,8 +30,9 @@ class RevPiOption(tkinter.Frame):
self.pack(expand=True, fill="both")
self.xmlcli = xmlcli
self.xmlmode = xmlmode
self.xmlstate = "normal" if xmlmode == 3 else "disabled"
self.mrk_var_xmlmod2 = False
self.mrk_var_xmlmod3 = False
self.mrk_xmlmodask = False
# Fenster bauen
self._createwidgets()
@@ -61,7 +65,7 @@ class RevPiOption(tkinter.Frame):
_("Question"),
_("Do you really want to quit? \nUnsaved changes will "
"be lost"),
parent=self.master
parent=self.master, default="no"
)
if ask:
@@ -72,6 +76,8 @@ class RevPiOption(tkinter.Frame):
self.master.wm_title(_("RevPi Python PLC Options"))
self.master.wm_resizable(width=False, height=False)
xmlstate = "normal" if self.dc["xmlrpc"] >= 3 else "disabled"
cpadw = {"padx": 4, "pady": 2, "sticky": "w"}
cpadwe = {"padx": 4, "pady": 2, "sticky": "we"}
@@ -87,18 +93,18 @@ class RevPiOption(tkinter.Frame):
ckb_start = tkinter.Checkbutton(stst)
ckb_start["text"] = _("Start program automatically")
ckb_start["state"] = self.xmlstate
ckb_start["state"] = xmlstate
ckb_start["variable"] = self.var_start
ckb_start.grid(**cpadw)
ckb_reload = tkinter.Checkbutton(stst)
ckb_reload["text"] = _("Restart program after exit")
ckb_reload["state"] = self.xmlstate
ckb_reload["state"] = xmlstate
ckb_reload["variable"] = self.var_reload
ckb_reload.grid(**cpadw)
ckb_zexit = tkinter.Checkbutton(stst, justify="left")
ckb_zexit["state"] = self.xmlstate
ckb_zexit["state"] = xmlstate
ckb_zexit["text"] = _(
"Set process image to NULL if program\n"
"terminates successfully")
@@ -106,7 +112,7 @@ class RevPiOption(tkinter.Frame):
ckb_zexit.grid(**cpadw)
ckb_zerr = tkinter.Checkbutton(stst, justify="left")
ckb_zerr["state"] = self.xmlstate
ckb_zerr["state"] = xmlstate
ckb_zerr["text"] = _(
"Set process image to NULL if program\n"
"terminates with errors")
@@ -129,14 +135,14 @@ class RevPiOption(tkinter.Frame):
lbl["text"] = _("Python version")
lbl.grid(columnspan=2, row=0, **cpadw)
rbn = tkinter.Radiobutton(prog)
rbn["state"] = self.xmlstate
rbn["state"] = xmlstate
rbn["text"] = "Python2"
rbn["value"] = 2
rbn["variable"] = self.var_pythonver
rbn.grid(column=0, row=1, **cpadw)
rbn = tkinter.Radiobutton(prog)
rbn["state"] = self.xmlstate
rbn["state"] = xmlstate
rbn["text"] = "Python3"
rbn["value"] = 3
rbn["variable"] = self.var_pythonver
@@ -151,7 +157,7 @@ class RevPiOption(tkinter.Frame):
lst.append("none")
opt_startpy = tkinter.OptionMenu(
prog, self.var_startpy, *lst)
opt_startpy["state"] = self.xmlstate
opt_startpy["state"] = xmlstate
opt_startpy.grid(columnspan=2, **cpadwe)
lbl = tkinter.Label(prog)
@@ -163,7 +169,7 @@ class RevPiOption(tkinter.Frame):
txt.grid(columnspan=2, **cpadw)
ckb_slave = tkinter.Checkbutton(prog, justify="left")
ckb_slave["state"] = self.xmlstate
ckb_slave["state"] = xmlstate
ckb_slave["text"] = _("Use RevPi as PLC-Slave")
ckb_slave["state"] = "disabled"
ckb_slave["variable"] = self.var_slave
@@ -182,21 +188,21 @@ class RevPiOption(tkinter.Frame):
ckb_xmlon = tkinter.Checkbutton(xmlrpc)
ckb_xmlon["command"] = self.askxmlon
ckb_xmlon["state"] = self.xmlstate
ckb_xmlon["state"] = xmlstate
ckb_xmlon["text"] = _("Activate XML-RPC server on RevPi")
ckb_xmlon["variable"] = self.var_xmlon
ckb_xmlon.grid(**cpadw)
self.ckb_xmlmod2 = tkinter.Checkbutton(xmlrpc, justify="left")
self.ckb_xmlmod2["command"] = self.xmlmods
self.ckb_xmlmod2["state"] = self.xmlstate
self.ckb_xmlmod2["command"] = self.xmlmod2_tail
self.ckb_xmlmod2["state"] = xmlstate
self.ckb_xmlmod2["text"] = \
_("Allow download of piCtory configuration and\nPLC programm")
self.ckb_xmlmod2["variable"] = self.var_xmlmod2
self.ckb_xmlmod2.grid(**cpadw)
self.ckb_xmlmod3 = tkinter.Checkbutton(xmlrpc, justify="left")
self.ckb_xmlmod3["state"] = self.xmlstate
self.ckb_xmlmod3["state"] = xmlstate
self.ckb_xmlmod3["text"] = \
_("Allow upload of piCtory configuration and\nPLC programm")
self.ckb_xmlmod3["variable"] = self.var_xmlmod3
@@ -209,14 +215,14 @@ class RevPiOption(tkinter.Frame):
spb_xmlport = tkinter.Spinbox(xmlrpc)
spb_xmlport["to"] = 65535
spb_xmlport["from"] = 1024
spb_xmlport["state"] = self.xmlstate
spb_xmlport["state"] = xmlstate
spb_xmlport["textvariable"] = self.var_xmlport
spb_xmlport.grid(**cpadwe)
# Buttons
btn_save = tkinter.Button(self)
btn_save["command"] = self._setappdata
btn_save["state"] = self.xmlstate
btn_save["state"] = xmlstate
btn_save["text"] = _("Save")
btn_save.grid(column=0, row=3)
@@ -225,9 +231,11 @@ class RevPiOption(tkinter.Frame):
btn_close["text"] = _("Close")
btn_close.grid(column=1, row=3)
def _loadappdata(self):
u"""Läd aktuelle Einstellungen vom RevPi."""
self.dc = self.xmlcli.get_config()
def _loadappdata(self, refresh=False):
u"""Läd aktuelle Einstellungen vom RevPi.
@param refresh Wenn True, werden Einstellungen heruntergeladen."""
if refresh:
self.dc = self.xmlcli.get_config()
self.var_start.set(self.dc.get("autostart", "1"))
self.var_reload.set(self.dc.get("autoreload", "1"))
@@ -241,33 +249,33 @@ class RevPiOption(tkinter.Frame):
self.var_xmlon.set(self.dc.get("xmlrpc", 0) >= 1)
self.var_xmlmod2.set(self.dc.get("xmlrpc", 0) >= 2)
self.mrk_var_xmlmod2 = self.var_xmlmod2.get()
self.var_xmlmod3.set(self.dc.get("xmlrpc", 0) >= 3)
self.mrk_var_xmlmod3 = self.var_xmlmod3.get()
self.var_xmlport.set(self.dc.get("xmlrpcport", "55123"))
def _setappdata(self):
u"""Speichert geänderte Einstellungen auf RevPi."""
dc = {}
dc["autostart"] = int(self.var_start.get())
dc["autoreload"] = int(self.var_reload.get())
dc["zeroonexit"] = int(self.var_zexit.get())
dc["zeroonerror"] = int(self.var_zerr.get())
self.dc["autostart"] = int(self.var_start.get())
self.dc["autoreload"] = int(self.var_reload.get())
self.dc["zeroonexit"] = int(self.var_zexit.get())
self.dc["zeroonerror"] = int(self.var_zerr.get())
dc["plcprogram"] = self.var_startpy.get()
dc["plcarguments"] = self.var_startargs.get()
dc["pythonversion"] = self.var_pythonver.get()
dc["plcslave"] = int(self.var_slave.get())
self.dc["plcprogram"] = self.var_startpy.get()
self.dc["plcarguments"] = self.var_startargs.get()
self.dc["pythonversion"] = self.var_pythonver.get()
self.dc["plcslave"] = int(self.var_slave.get())
dc["xmlrpc"] = 0
self.dc["xmlrpc"] = 0
if self.var_xmlon.get():
dc["xmlrpc"] += 1
self.dc["xmlrpc"] += 1
if self.var_xmlmod2.get():
dc["xmlrpc"] += 1
self.dc["xmlrpc"] += 1
if self.var_xmlmod3.get():
dc["xmlrpc"] += 1
self.dc["xmlrpc"] += 1
dc["xmlrpcport"] = self.var_xmlport.get()
self.xmlmode = dc["xmlrpc"]
self.dc["xmlrpcport"] = self.var_xmlport.get()
ask = tkmsg.askyesnocancel(
_("Question"),
@@ -277,12 +285,13 @@ class RevPiOption(tkinter.Frame):
parent=self.master
)
if ask is not None:
if self.xmlcli.set_config(dc, ask):
if self.xmlcli.set_config(self.dc, ask):
tkmsg.showinfo(
_("Information"),
_("Settings saved"),
parent=self.master
)
self._checkclose()
else:
tkmsg.showerror(
_("Error"),
@@ -293,22 +302,36 @@ class RevPiOption(tkinter.Frame):
def askxmlon(self):
u"""Fragt Nuter, ob wirklicht abgeschaltet werden soll."""
if not self.var_xmlon.get():
ask = tkmsg.askyesno(
if not (self.var_xmlon.get() or self.mrk_xmlmodask):
self.mrk_xmlmodask = tkmsg.askyesno(
_("Question"),
_("Are you sure you want to deactivate the XML-RPC server? "
"You will NOT be able to access the Revolution Pi with "
"this program."),
parent=self.master
)
if not ask:
if not self.mrk_xmlmodask:
self.var_xmlon.set(True)
self.xmlmods()
self.xmlmod_tail()
def xmlmods(self):
def xmlmod_tail(self):
u"""Passt XML-Optionszugriff an."""
self.ckb_xmlmod2["state"] = \
"normal" if self.var_xmlon.get() else "disabled"
self.ckb_xmlmod3["state"] = \
"normal" if self.var_xmlmod2.get() else "disabled"
if self.var_xmlon.get():
self.var_xmlmod2.set(self.mrk_var_xmlmod2)
self.ckb_xmlmod2["state"] = "normal"
else:
self.mrk_var_xmlmod2 = self.var_xmlmod2.get()
self.var_xmlmod2.set(False)
self.ckb_xmlmod2["state"] = "disabled"
self.xmlmod2_tail()
def xmlmod2_tail(self):
u"""Passt XML-Optionszugriff an."""
if self.var_xmlmod2.get():
self.var_xmlmod3.set(self.mrk_var_xmlmod3)
self.ckb_xmlmod3["state"] = "normal"
else:
self.mrk_var_xmlmod3 = self.var_xmlmod3.get()
self.var_xmlmod3.set(False)
self.ckb_xmlmod3["state"] = "disabled"

View File

@@ -78,6 +78,7 @@ class RevPiPyControl(tkinter.Frame):
if self.tkprogram is not None:
self.tkprogram.destroy()
if self.debugframe is not None:
self.plcdebug()
self.debugframe.destroy()
self.cli.psstop()
self.debugframe = None
@@ -243,8 +244,9 @@ class RevPiPyControl(tkinter.Frame):
# Show/Hide wechseln
if self.debugframe.winfo_viewable():
self.debugframe.hideallwindows()
self.debugframe.autorw.set(False)
self.debugframe.toggleauto()
if self.debugframe.autorw.get():
self.debugframe.autorw.set(False)
self.debugframe.toggleauto()
self.debugframe.dowrite.set(False)
self.debugframe.pack_forget()
else:
@@ -293,11 +295,12 @@ class RevPiPyControl(tkinter.Frame):
else:
win = tkinter.Toplevel(self)
self.tkoptions = \
revpioption.RevPiOption(win, self.cli, self.xmlmode)
revpioption.RevPiOption(win, self.cli)
win.focus_set()
win.grab_set()
self.wait_window(win)
self.xmlmode = self.tkoptions.xmlmode
if self.tkoptions.dc is not None:
self.xmlmode = self.tkoptions.dc["xmlrpc"]
def plcprogram(self):
u"""Startet das Programmfenster."""
@@ -331,12 +334,12 @@ class RevPiPyControl(tkinter.Frame):
def serverdisconnect(self):
u"""Trennt eine bestehende Verbindung."""
self._closeall()
socket.setdefaulttimeout(2)
self.cli = None
self._btnstate()
self.mbar.entryconfig("PLC", state="disabled")
self.var_conn.set("")
self._closeall()
def servererror(self):
u"""Setzt alles zurück für neue Verbindungen."""