mirror of
https://github.com/naruxde/revpipycontrol.git
synced 2025-11-08 15:43:52 +01:00
xml-mode abfragen und Fenster danach aufbauen
Meldungstexte ?berarbeitet
This commit is contained in:
@@ -3,3 +3,6 @@ syntax: glob
|
|||||||
deb_dist/*
|
deb_dist/*
|
||||||
dist/*
|
dist/*
|
||||||
revpipycontrol.egg-info/*
|
revpipycontrol.egg-info/*
|
||||||
|
doc/*
|
||||||
|
deb/*
|
||||||
|
.eric6project/*
|
||||||
|
|||||||
BIN
data/revpipycontrol.ico
Normal file
BIN
data/revpipycontrol.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.2 KiB |
BIN
data/revpipycontrol.png
Normal file
BIN
data/revpipycontrol.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
|
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
|
||||||
<!-- eric project file for project revpipycontrol -->
|
<!-- eric project file for project revpipycontrol -->
|
||||||
<!-- Saved: 2017-03-16, 16:32:04 -->
|
<!-- Saved: 2017-03-16, 21:00:50 -->
|
||||||
<!-- Copyright (C) 2017 Sven Sager, akira@narux.de -->
|
<!-- Copyright (C) 2017 Sven Sager, akira@narux.de -->
|
||||||
<Project version="5.1">
|
<Project version="5.1">
|
||||||
<Language>en_US</Language>
|
<Language>en_US</Language>
|
||||||
@@ -14,7 +14,6 @@
|
|||||||
<Email>akira@narux.de</Email>
|
<Email>akira@narux.de</Email>
|
||||||
<Eol index="-1"/>
|
<Eol index="-1"/>
|
||||||
<Sources>
|
<Sources>
|
||||||
<Source>revpipycontrol/__init__.py</Source>
|
|
||||||
<Source>revpipycontrol/revpipycontrol.py</Source>
|
<Source>revpipycontrol/revpipycontrol.py</Source>
|
||||||
<Source>revpipycontrol/revpicheckclient.py</Source>
|
<Source>revpipycontrol/revpicheckclient.py</Source>
|
||||||
<Source>setup.py</Source>
|
<Source>setup.py</Source>
|
||||||
@@ -29,6 +28,7 @@
|
|||||||
<Interfaces/>
|
<Interfaces/>
|
||||||
<Others>
|
<Others>
|
||||||
<Other>data</Other>
|
<Other>data</Other>
|
||||||
|
<Other>doc</Other>
|
||||||
</Others>
|
</Others>
|
||||||
<MainScript>revpipycontrol/revpipycontrol.py</MainScript>
|
<MainScript>revpipycontrol/revpipycontrol.py</MainScript>
|
||||||
<Vcs>
|
<Vcs>
|
||||||
@@ -144,6 +144,59 @@
|
|||||||
<FiletypeAssociation pattern="*.pyw" type="SOURCES"/>
|
<FiletypeAssociation pattern="*.pyw" type="SOURCES"/>
|
||||||
<FiletypeAssociation pattern="*.pyw3" type="SOURCES"/>
|
<FiletypeAssociation pattern="*.pyw3" type="SOURCES"/>
|
||||||
</FiletypeAssociations>
|
</FiletypeAssociations>
|
||||||
|
<Documentation>
|
||||||
|
<DocumentationParams>
|
||||||
|
<dict>
|
||||||
|
<key>
|
||||||
|
<string>ERIC4DOC</string>
|
||||||
|
</key>
|
||||||
|
<value>
|
||||||
|
<dict>
|
||||||
|
<key>
|
||||||
|
<string>ignoreFilePatterns</string>
|
||||||
|
</key>
|
||||||
|
<value>
|
||||||
|
<list>
|
||||||
|
<string></string>
|
||||||
|
</list>
|
||||||
|
</value>
|
||||||
|
<key>
|
||||||
|
<string>noindex</string>
|
||||||
|
</key>
|
||||||
|
<value>
|
||||||
|
<bool>True</bool>
|
||||||
|
</value>
|
||||||
|
<key>
|
||||||
|
<string>outputDirectory</string>
|
||||||
|
</key>
|
||||||
|
<value>
|
||||||
|
<string>doc</string>
|
||||||
|
</value>
|
||||||
|
<key>
|
||||||
|
<string>qtHelpEnabled</string>
|
||||||
|
</key>
|
||||||
|
<value>
|
||||||
|
<bool>False</bool>
|
||||||
|
</value>
|
||||||
|
<key>
|
||||||
|
<string>sourceExtensions</string>
|
||||||
|
</key>
|
||||||
|
<value>
|
||||||
|
<list>
|
||||||
|
<string></string>
|
||||||
|
</list>
|
||||||
|
</value>
|
||||||
|
<key>
|
||||||
|
<string>useRecursion</string>
|
||||||
|
</key>
|
||||||
|
<value>
|
||||||
|
<bool>True</bool>
|
||||||
|
</value>
|
||||||
|
</dict>
|
||||||
|
</value>
|
||||||
|
</dict>
|
||||||
|
</DocumentationParams>
|
||||||
|
</Documentation>
|
||||||
<Checkers>
|
<Checkers>
|
||||||
<CheckersParams>
|
<CheckersParams>
|
||||||
<dict>
|
<dict>
|
||||||
|
|||||||
@@ -11,18 +11,23 @@ import tkinter.messagebox as tkmsg
|
|||||||
|
|
||||||
class RevPiOption(tkinter.Frame):
|
class RevPiOption(tkinter.Frame):
|
||||||
|
|
||||||
def __init__(self, master, xmlcli):
|
def __init__(self, master, xmlcli, xmlmode):
|
||||||
|
if xmlmode < 2:
|
||||||
|
return None
|
||||||
|
|
||||||
super().__init__(master)
|
super().__init__(master)
|
||||||
self.pack(expand=True, fill="both")
|
self.pack(expand=True, fill="both")
|
||||||
|
|
||||||
self.xmlcli = xmlcli
|
self.xmlcli = xmlcli
|
||||||
|
self.xmlmode = xmlmode
|
||||||
|
self.xmlstate = "normal" if xmlmode == 3 else "disabled"
|
||||||
|
|
||||||
# Fenster bauen
|
# Fenster bauen
|
||||||
self._createwidgets()
|
self._createwidgets()
|
||||||
self._loadappdata()
|
self._loadappdata()
|
||||||
|
|
||||||
def _createwidgets(self):
|
def _createwidgets(self):
|
||||||
self.master.wm_title("RevPi Python PLC Connections")
|
self.master.wm_title("RevPi Python PLC Options")
|
||||||
self.master.wm_resizable(width=False, height=False)
|
self.master.wm_resizable(width=False, height=False)
|
||||||
|
|
||||||
cpadw = {"padx": 4, "pady": 2, "sticky": "w"}
|
cpadw = {"padx": 4, "pady": 2, "sticky": "w"}
|
||||||
@@ -40,18 +45,25 @@ class RevPiOption(tkinter.Frame):
|
|||||||
|
|
||||||
ckb_start = tkinter.Checkbutton(stst)
|
ckb_start = tkinter.Checkbutton(stst)
|
||||||
ckb_start["text"] = "Programm automatisch starten"
|
ckb_start["text"] = "Programm automatisch starten"
|
||||||
|
ckb_start["state"] = self.xmlstate
|
||||||
ckb_start["variable"] = self.var_start
|
ckb_start["variable"] = self.var_start
|
||||||
ckb_start.grid(**cpadw)
|
ckb_start.grid(**cpadw)
|
||||||
|
|
||||||
ckb_reload = tkinter.Checkbutton(stst)
|
ckb_reload = tkinter.Checkbutton(stst)
|
||||||
ckb_reload["text"] = "Programm nach Absturz neustarten"
|
ckb_reload["text"] = "Programm nach Beenden neu starten"
|
||||||
|
ckb_reload["state"] = self.xmlstate
|
||||||
ckb_reload["variable"] = self.var_reload
|
ckb_reload["variable"] = self.var_reload
|
||||||
ckb_reload.grid(**cpadw)
|
ckb_reload.grid(**cpadw)
|
||||||
|
|
||||||
ckb_zexit = tkinter.Checkbutton(stst, justify="left")
|
ckb_zexit = tkinter.Checkbutton(stst, justify="left")
|
||||||
|
ckb_zexit["state"] = self.xmlstate
|
||||||
ckb_zexit["text"] = "Prozessabbild auf NULL setzen, wenn " \
|
ckb_zexit["text"] = "Prozessabbild auf NULL setzen, wenn " \
|
||||||
"Programm\nerfolgreich beendet wird"
|
"Programm\nerfolgreich beendet wird"
|
||||||
ckb_zexit["variable"] = self.var_zexit
|
ckb_zexit["variable"] = self.var_zexit
|
||||||
ckb_zexit.grid(**cpadw)
|
ckb_zexit.grid(**cpadw)
|
||||||
|
|
||||||
ckb_zerr = tkinter.Checkbutton(stst, justify="left")
|
ckb_zerr = tkinter.Checkbutton(stst, justify="left")
|
||||||
|
ckb_zerr["state"] = self.xmlstate
|
||||||
ckb_zerr["text"] = "Prozessabbild auf NULL setzen, wenn " \
|
ckb_zerr["text"] = "Prozessabbild auf NULL setzen, wenn " \
|
||||||
"Programm\ndurch Absturz beendet wird"
|
"Programm\ndurch Absturz beendet wird"
|
||||||
ckb_zerr["variable"] = self.var_zerr
|
ckb_zerr["variable"] = self.var_zerr
|
||||||
@@ -72,25 +84,33 @@ class RevPiOption(tkinter.Frame):
|
|||||||
lbl["text"] = "Python Version"
|
lbl["text"] = "Python Version"
|
||||||
lbl.grid(columnspan=2, row=0, **cpadw)
|
lbl.grid(columnspan=2, row=0, **cpadw)
|
||||||
rbn = tkinter.Radiobutton(prog)
|
rbn = tkinter.Radiobutton(prog)
|
||||||
|
rbn["state"] = self.xmlstate
|
||||||
rbn["text"] = "Python2"
|
rbn["text"] = "Python2"
|
||||||
rbn["value"] = 2
|
rbn["value"] = 2
|
||||||
rbn["variable"] = self.var_pythonver
|
rbn["variable"] = self.var_pythonver
|
||||||
rbn.grid(column=0, row=1, **cpadw)
|
rbn.grid(column=0, row=1, **cpadw)
|
||||||
|
|
||||||
rbn = tkinter.Radiobutton(prog)
|
rbn = tkinter.Radiobutton(prog)
|
||||||
|
rbn["state"] = self.xmlstate
|
||||||
rbn["text"] = "Python3"
|
rbn["text"] = "Python3"
|
||||||
rbn["value"] = 3
|
rbn["value"] = 3
|
||||||
rbn["variable"] = self.var_pythonver
|
rbn["variable"] = self.var_pythonver
|
||||||
rbn.grid(column=1, row=1, **cpadw)
|
rbn.grid(column=1, row=1, **cpadw)
|
||||||
|
|
||||||
lbl = tkinter.Label(prog)
|
lbl = tkinter.Label(prog)
|
||||||
lbl["text"] = "Python PLC Programname"
|
lbl["text"] = "Python PLC Programname"
|
||||||
lbl.grid(columnspan=2, **cpadw)
|
lbl.grid(columnspan=2, **cpadw)
|
||||||
|
|
||||||
lst = self.xmlcli.get_filelist()
|
lst = self.xmlcli.get_filelist()
|
||||||
if len(lst) == 0:
|
if len(lst) == 0:
|
||||||
lst.append("none")
|
lst.append("none")
|
||||||
opt_startpy = tkinter.OptionMenu(
|
opt_startpy = tkinter.OptionMenu(
|
||||||
prog, self.var_startpy, *lst)
|
prog, self.var_startpy, *lst)
|
||||||
|
opt_startpy["state"] = self.xmlstate
|
||||||
opt_startpy.grid(columnspan=2, **cpadwe)
|
opt_startpy.grid(columnspan=2, **cpadwe)
|
||||||
|
|
||||||
ckb_slave = tkinter.Checkbutton(prog, justify="left")
|
ckb_slave = tkinter.Checkbutton(prog, justify="left")
|
||||||
|
ckb_slave["state"] = self.xmlstate
|
||||||
ckb_slave["text"] = "RevPi als PLC-Slave verwenden"
|
ckb_slave["text"] = "RevPi als PLC-Slave verwenden"
|
||||||
ckb_slave["state"] = "disabled"
|
ckb_slave["state"] = "disabled"
|
||||||
ckb_slave["variable"] = self.var_slave
|
ckb_slave["variable"] = self.var_slave
|
||||||
@@ -109,32 +129,41 @@ class RevPiOption(tkinter.Frame):
|
|||||||
|
|
||||||
ckb_xmlon = tkinter.Checkbutton(xmlrpc)
|
ckb_xmlon = tkinter.Checkbutton(xmlrpc)
|
||||||
ckb_xmlon["command"] = self.askxmlon
|
ckb_xmlon["command"] = self.askxmlon
|
||||||
|
ckb_xmlon["state"] = self.xmlstate
|
||||||
ckb_xmlon["text"] = "XML-RPC Server aktiv auf RevPi"
|
ckb_xmlon["text"] = "XML-RPC Server aktiv auf RevPi"
|
||||||
ckb_xmlon["variable"] = self.var_xmlon
|
ckb_xmlon["variable"] = self.var_xmlon
|
||||||
ckb_xmlon.grid(**cpadw)
|
ckb_xmlon.grid(**cpadw)
|
||||||
|
|
||||||
self.ckb_xmlmod2 = tkinter.Checkbutton(xmlrpc, justify="left")
|
self.ckb_xmlmod2 = tkinter.Checkbutton(xmlrpc, justify="left")
|
||||||
self.ckb_xmlmod2["command"] = self.xmlmods
|
self.ckb_xmlmod2["command"] = self.xmlmods
|
||||||
|
self.ckb_xmlmod2["state"] = self.xmlstate
|
||||||
self.ckb_xmlmod2["text"] = \
|
self.ckb_xmlmod2["text"] = \
|
||||||
"Download von piCtory Konfiguration und\nPLC Programm zulassen"
|
"Download von piCtory Konfiguration und\nPLC Programm zulassen"
|
||||||
self.ckb_xmlmod2["variable"] = self.var_xmlmod2
|
self.ckb_xmlmod2["variable"] = self.var_xmlmod2
|
||||||
self.ckb_xmlmod2.grid(**cpadw)
|
self.ckb_xmlmod2.grid(**cpadw)
|
||||||
|
|
||||||
self.ckb_xmlmod3 = tkinter.Checkbutton(xmlrpc, justify="left")
|
self.ckb_xmlmod3 = tkinter.Checkbutton(xmlrpc, justify="left")
|
||||||
|
self.ckb_xmlmod3["state"] = self.xmlstate
|
||||||
self.ckb_xmlmod3["text"] = \
|
self.ckb_xmlmod3["text"] = \
|
||||||
"Upload von piCtory Konfiguration und\nPLC Programm zualssen"
|
"Upload von piCtory Konfiguration und\nPLC Programm zualssen"
|
||||||
self.ckb_xmlmod3["variable"] = self.var_xmlmod3
|
self.ckb_xmlmod3["variable"] = self.var_xmlmod3
|
||||||
self.ckb_xmlmod3.grid(**cpadw)
|
self.ckb_xmlmod3.grid(**cpadw)
|
||||||
|
|
||||||
lbl = tkinter.Label(xmlrpc)
|
lbl = tkinter.Label(xmlrpc)
|
||||||
lbl["text"] = "XML-RPC Serverport"
|
lbl["text"] = "XML-RPC Serverport"
|
||||||
lbl.grid(**cpadw)
|
lbl.grid(**cpadw)
|
||||||
|
|
||||||
spb_xmlport = tkinter.Spinbox(xmlrpc)
|
spb_xmlport = tkinter.Spinbox(xmlrpc)
|
||||||
spb_xmlport["to"] = 65535
|
spb_xmlport["to"] = 65535
|
||||||
spb_xmlport["from"] = 1024
|
spb_xmlport["from"] = 1024
|
||||||
|
spb_xmlport["state"] = self.xmlstate
|
||||||
spb_xmlport["textvariable"] = self.var_xmlport
|
spb_xmlport["textvariable"] = self.var_xmlport
|
||||||
spb_xmlport.grid(**cpadwe)
|
spb_xmlport.grid(**cpadwe)
|
||||||
|
|
||||||
# Buttons
|
# Buttons
|
||||||
btn_save = tkinter.Button(self)
|
btn_save = tkinter.Button(self)
|
||||||
btn_save["command"] = self._setappdata
|
btn_save["command"] = self._setappdata
|
||||||
|
btn_save["state"] = self.xmlstate
|
||||||
btn_save["text"] = "Speichern"
|
btn_save["text"] = "Speichern"
|
||||||
btn_save.grid(column=0, row=3)
|
btn_save.grid(column=0, row=3)
|
||||||
|
|
||||||
@@ -181,9 +210,10 @@ class RevPiOption(tkinter.Frame):
|
|||||||
dc["xmlrpc"] += 1
|
dc["xmlrpc"] += 1
|
||||||
|
|
||||||
dc["xmlrpcport"] = self.var_xmlport.get()
|
dc["xmlrpcport"] = self.var_xmlport.get()
|
||||||
|
self.xmlmode = dc["xmlrpc"]
|
||||||
|
|
||||||
ask = tkmsg.askyesnocancel(
|
ask = tkmsg.askyesnocancel(
|
||||||
"Frage", "Die Einstellungen werden jetzt auf den Revolution Pi "
|
"Frage", "Die Einstellungen werden jetzt auf dem Revolution Pi "
|
||||||
"gespeichert. \n\nSollen die neuen Einstellungen sofort in Kraft "
|
"gespeichert. \n\nSollen die neuen Einstellungen sofort in Kraft "
|
||||||
"treten? \nDies bedeutet einen Neustart des Dienstes und des ggf. "
|
"treten? \nDies bedeutet einen Neustart des Dienstes und des ggf. "
|
||||||
"laufenden PLC-Programms!", parent=self.master
|
"laufenden PLC-Programms!", parent=self.master
|
||||||
@@ -191,7 +221,8 @@ class RevPiOption(tkinter.Frame):
|
|||||||
if ask is not None:
|
if ask is not None:
|
||||||
if self.xmlcli.set_config(dc, ask):
|
if self.xmlcli.set_config(dc, ask):
|
||||||
tkmsg.showinfo(
|
tkmsg.showinfo(
|
||||||
"Information", "Einstellungen gespeichert.", parent=self.master
|
"Information", "Einstellungen gespeichert.",
|
||||||
|
parent=self.master
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
tkmsg.showerror(
|
tkmsg.showerror(
|
||||||
@@ -204,7 +235,7 @@ class RevPiOption(tkinter.Frame):
|
|||||||
if not self.var_xmlon.get():
|
if not self.var_xmlon.get():
|
||||||
ask = tkmsg.askyesno(
|
ask = tkmsg.askyesno(
|
||||||
"Frage", "Soll der XML-RPC Server wirklich beendet werden? "
|
"Frage", "Soll der XML-RPC Server wirklich beendet werden? "
|
||||||
"Sie können dann mit diesem Programm NICHT mehr auf den "
|
"Sie können dann NICHT mehr mit diesem Programm auf den "
|
||||||
"Revolution Pi zugreifen.", parent=self.master
|
"Revolution Pi zugreifen.", parent=self.master
|
||||||
)
|
)
|
||||||
if not ask:
|
if not ask:
|
||||||
|
|||||||
@@ -36,6 +36,8 @@ class RevPiPlcList(tkinter.Frame):
|
|||||||
super().__init__(master)
|
super().__init__(master)
|
||||||
self.pack()
|
self.pack()
|
||||||
|
|
||||||
|
self.changes = False
|
||||||
|
|
||||||
# Daten laden
|
# Daten laden
|
||||||
self._connections = {}
|
self._connections = {}
|
||||||
|
|
||||||
@@ -117,6 +119,7 @@ class RevPiPlcList(tkinter.Frame):
|
|||||||
makedirs(os.path.dirname(savefile), exist_ok=True)
|
makedirs(os.path.dirname(savefile), exist_ok=True)
|
||||||
fh = open(savefile, "wb")
|
fh = open(savefile, "wb")
|
||||||
pickle.dump(self._connections, fh)
|
pickle.dump(self._connections, fh)
|
||||||
|
self.changes = False
|
||||||
except:
|
except:
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
@@ -133,14 +136,18 @@ class RevPiPlcList(tkinter.Frame):
|
|||||||
|
|
||||||
self.build_listconn()
|
self.build_listconn()
|
||||||
self.evt_btnnew()
|
self.evt_btnnew()
|
||||||
|
self.changes = True
|
||||||
|
|
||||||
def evt_btnclose(self):
|
def evt_btnclose(self):
|
||||||
|
if self.changes:
|
||||||
ask = tkmsg.askyesno(
|
ask = tkmsg.askyesno(
|
||||||
"Frage...",
|
parent=self.master, title="Frage...",
|
||||||
"Wollen Sie wirklich beenden?\n"
|
message="Wollen Sie wirklich beenden?\n"
|
||||||
"Nicht gespeicherte Änderungen gehen verloren",
|
"Nicht gespeicherte Änderungen gehen verloren",
|
||||||
parent=self.master
|
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
ask = True
|
||||||
|
|
||||||
if ask:
|
if ask:
|
||||||
self.master.destroy()
|
self.master.destroy()
|
||||||
|
|
||||||
@@ -168,6 +175,7 @@ class RevPiPlcList(tkinter.Frame):
|
|||||||
del self._connections[item]
|
del self._connections[item]
|
||||||
self.build_listconn()
|
self.build_listconn()
|
||||||
self.evt_btnnew()
|
self.evt_btnnew()
|
||||||
|
self.changes = True
|
||||||
|
|
||||||
def evt_btnsave(self):
|
def evt_btnsave(self):
|
||||||
if self._saveappdata():
|
if self._saveappdata():
|
||||||
|
|||||||
@@ -19,7 +19,10 @@ from xmlrpc.client import Binary
|
|||||||
|
|
||||||
class RevPiProgram(tkinter.Frame):
|
class RevPiProgram(tkinter.Frame):
|
||||||
|
|
||||||
def __init__(self, master, xmlcli, revpi):
|
def __init__(self, master, xmlcli, xmlmode, revpi):
|
||||||
|
if xmlmode < 2:
|
||||||
|
return None
|
||||||
|
|
||||||
super().__init__(master)
|
super().__init__(master)
|
||||||
# master.protocol("WM_DELETE_WINDOW", self._checkclose)
|
# master.protocol("WM_DELETE_WINDOW", self._checkclose)
|
||||||
self.pack(expand=True, fill="both")
|
self.pack(expand=True, fill="both")
|
||||||
@@ -27,6 +30,8 @@ class RevPiProgram(tkinter.Frame):
|
|||||||
self.uploaded = False
|
self.uploaded = False
|
||||||
self.revpi = revpi
|
self.revpi = revpi
|
||||||
self.xmlcli = xmlcli
|
self.xmlcli = xmlcli
|
||||||
|
self.xmlmode = xmlmode
|
||||||
|
self.xmlstate = "normal" if xmlmode == 3 else "disabled"
|
||||||
|
|
||||||
# Fenster bauen
|
# Fenster bauen
|
||||||
self._createwidgets()
|
self._createwidgets()
|
||||||
@@ -98,22 +103,26 @@ class RevPiProgram(tkinter.Frame):
|
|||||||
opt = tkinter.OptionMenu(
|
opt = tkinter.OptionMenu(
|
||||||
prog, self.var_typeup, *self.lst_typeup,
|
prog, self.var_typeup, *self.lst_typeup,
|
||||||
command=self._evt_optup)
|
command=self._evt_optup)
|
||||||
|
opt["state"] = self.xmlstate
|
||||||
opt["width"] = 10
|
opt["width"] = 10
|
||||||
opt.grid(column=1, row=r, **cpad)
|
opt.grid(column=1, row=r, **cpad)
|
||||||
|
|
||||||
r = 3
|
r = 3
|
||||||
ckb = tkinter.Checkbutton(prog)
|
ckb = tkinter.Checkbutton(prog)
|
||||||
|
ckb["state"] = self.xmlstate
|
||||||
ckb["text"] = "vorher alles im Uploadverzeichnis löschen"
|
ckb["text"] = "vorher alles im Uploadverzeichnis löschen"
|
||||||
ckb["variable"] = self.var_cleanup
|
ckb["variable"] = self.var_cleanup
|
||||||
ckb.grid(column=0, row=r, columnspan=2, **cpadw)
|
ckb.grid(column=0, row=r, columnspan=2, **cpadw)
|
||||||
|
|
||||||
r = 4
|
r = 4
|
||||||
self.ckb_picup = tkinter.Checkbutton(prog)
|
self.ckb_picup = tkinter.Checkbutton(prog)
|
||||||
|
self.ckb_picup["state"] = self.xmlstate
|
||||||
self.ckb_picup["text"] = "enthält piCtory Konfiguration"
|
self.ckb_picup["text"] = "enthält piCtory Konfiguration"
|
||||||
self.ckb_picup["variable"] = self.var_picup
|
self.ckb_picup["variable"] = self.var_picup
|
||||||
self.ckb_picup.grid(column=0, row=r, **cpadw)
|
self.ckb_picup.grid(column=0, row=r, **cpadw)
|
||||||
btn = tkinter.Button(prog)
|
btn = tkinter.Button(prog)
|
||||||
btn["command"] = self.plcupload
|
btn["command"] = self.plcupload
|
||||||
|
btn["state"] = self.xmlstate
|
||||||
btn["text"] = "Upload"
|
btn["text"] = "Upload"
|
||||||
btn.grid(column=1, row=r, **cpad)
|
btn.grid(column=1, row=r, **cpad)
|
||||||
|
|
||||||
@@ -135,6 +144,7 @@ class RevPiProgram(tkinter.Frame):
|
|||||||
lbl.grid(column=0, row=1, **cpadw)
|
lbl.grid(column=0, row=1, **cpadw)
|
||||||
btn = tkinter.Button(picto)
|
btn = tkinter.Button(picto)
|
||||||
btn["command"] = self.setpictoryrsc
|
btn["command"] = self.setpictoryrsc
|
||||||
|
btn["state"] = self.xmlstate
|
||||||
btn["text"] = "Upload"
|
btn["text"] = "Upload"
|
||||||
btn.grid(column=1, row=1, **cpad)
|
btn.grid(column=1, row=1, **cpad)
|
||||||
|
|
||||||
@@ -144,7 +154,7 @@ class RevPiProgram(tkinter.Frame):
|
|||||||
proc["text"] = "piControl0 Prozessabbild"
|
proc["text"] = "piControl0 Prozessabbild"
|
||||||
proc.grid(columnspan=2, pady=2, sticky="we")
|
proc.grid(columnspan=2, pady=2, sticky="we")
|
||||||
lbl = tkinter.Label(proc)
|
lbl = tkinter.Label(proc)
|
||||||
lbl["text"] = "Prozessabbild herunterladen"
|
lbl["text"] = "Prozessabbild-Dump herunterladen"
|
||||||
lbl.grid(column=0, row=0, **cpadw)
|
lbl.grid(column=0, row=0, **cpadw)
|
||||||
btn = tkinter.Button(proc)
|
btn = tkinter.Button(proc)
|
||||||
btn["command"] = self.getprocimg
|
btn["command"] = self.getprocimg
|
||||||
@@ -282,7 +292,7 @@ class RevPiProgram(tkinter.Frame):
|
|||||||
ask = tkmsg.askyesno(
|
ask = tkmsg.askyesno(
|
||||||
parent=self.master, title="Frage",
|
parent=self.master, title="Frage",
|
||||||
message="Soll nach dem Hochladen der piCtory Konfiguration "
|
message="Soll nach dem Hochladen der piCtory Konfiguration "
|
||||||
"ein reset am piControl Treiber durchgeführt werden?"
|
"ein Reset am piControl Treiber durchgeführt werden?"
|
||||||
)
|
)
|
||||||
|
|
||||||
ec = self.xmlcli.set_pictoryrsc(Binary(fh.read()), ask)
|
ec = self.xmlcli.set_pictoryrsc(Binary(fh.read()), ask)
|
||||||
@@ -400,7 +410,7 @@ class RevPiProgram(tkinter.Frame):
|
|||||||
if tup == 0:
|
if tup == 0:
|
||||||
# Datei
|
# Datei
|
||||||
fileselect = tkfd.askopenfilenames(
|
fileselect = tkfd.askopenfilenames(
|
||||||
parent=self.master, title="Pythonprogramm übertragen...",
|
parent=self.master, title="Python Programm übertragen...",
|
||||||
filetypes=(("Python", "*.py"), ("All Files", "*.*"))
|
filetypes=(("Python", "*.py"), ("All Files", "*.*"))
|
||||||
)
|
)
|
||||||
if type(fileselect) == tuple and len(fileselect) > 0:
|
if type(fileselect) == tuple and len(fileselect) > 0:
|
||||||
|
|||||||
BIN
revpipycontrol/revpipycontrol.png
Normal file
BIN
revpipycontrol/revpipycontrol.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
@@ -22,6 +22,7 @@ from xmlrpc.client import ServerProxy
|
|||||||
|
|
||||||
socket.setdefaulttimeout(2)
|
socket.setdefaulttimeout(2)
|
||||||
|
|
||||||
|
|
||||||
def addroot(filename):
|
def addroot(filename):
|
||||||
u"""Hängt root-dir der Anwendung vor Dateinamen.
|
u"""Hängt root-dir der Anwendung vor Dateinamen.
|
||||||
|
|
||||||
@@ -48,6 +49,7 @@ class RevPiPyControl(tkinter.Frame):
|
|||||||
self.dict_conn = revpiplclist.get_connections()
|
self.dict_conn = revpiplclist.get_connections()
|
||||||
self.errcount = 0
|
self.errcount = 0
|
||||||
self.revpiname = None
|
self.revpiname = None
|
||||||
|
self.xmlmode = 0
|
||||||
|
|
||||||
# Globale Fenster
|
# Globale Fenster
|
||||||
self.tklogs = None
|
self.tklogs = None
|
||||||
@@ -148,7 +150,7 @@ class RevPiPyControl(tkinter.Frame):
|
|||||||
)
|
)
|
||||||
# Server prüfen
|
# Server prüfen
|
||||||
try:
|
try:
|
||||||
sp.system.listMethods()
|
self.xmlmode = sp.xmlmodus()
|
||||||
except:
|
except:
|
||||||
self.servererror()
|
self.servererror()
|
||||||
else:
|
else:
|
||||||
@@ -183,25 +185,43 @@ class RevPiPyControl(tkinter.Frame):
|
|||||||
self._fillconnbar()
|
self._fillconnbar()
|
||||||
|
|
||||||
def plclogs(self):
|
def plclogs(self):
|
||||||
# TODO: nicht doppelt starten
|
if self.tklogs is None or len(self.tklogs.children) == 0:
|
||||||
win = tkinter.Toplevel(self)
|
win = tkinter.Toplevel(self)
|
||||||
self.tklogs = revpilogfile.RevPiLogfile(win, self.cli)
|
self.tklogs = revpilogfile.RevPiLogfile(win, self.cli)
|
||||||
|
else:
|
||||||
|
self.tklogs.focus_set()
|
||||||
|
|
||||||
def plcmonitor(self):
|
def plcmonitor(self):
|
||||||
# TODO: Monitorfenster
|
# TODO: Monitorfenster
|
||||||
#self.tkmonitor = revpicheckclient.RevPiCheckClient(self.master, self.cli)
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def plcoptions(self):
|
def plcoptions(self):
|
||||||
|
if self.xmlmode < 2:
|
||||||
|
tkmsg.showwarning(
|
||||||
|
parent=self.master, title="Warnung",
|
||||||
|
message="Der XML-RPC Modus ist beim RevPiPyLoad nicht hoch "
|
||||||
|
"genug eingestellt, um diesen Dialog zu verwenden!"
|
||||||
|
)
|
||||||
|
else:
|
||||||
win = tkinter.Toplevel(self)
|
win = tkinter.Toplevel(self)
|
||||||
self.tkoptions = revpioption.RevPiOption(win, self.cli)
|
self.tkoptions = \
|
||||||
|
revpioption.RevPiOption(win, self.cli, self.xmlmode)
|
||||||
win.focus_set()
|
win.focus_set()
|
||||||
win.grab_set()
|
win.grab_set()
|
||||||
self.wait_window(win)
|
self.wait_window(win)
|
||||||
|
self.xmlmode = self.tkoptions.xmlmode
|
||||||
|
|
||||||
def plcprogram(self):
|
def plcprogram(self):
|
||||||
|
if self.xmlmode < 2:
|
||||||
|
tkmsg.showwarning(
|
||||||
|
parent=self.master, title="Warnung",
|
||||||
|
message="Der XML-RPC Modus ist beim RevPiPyLoad nicht hoch "
|
||||||
|
"genug eingestellt, um diesen Dialog zu verwenden!"
|
||||||
|
)
|
||||||
|
else:
|
||||||
win = tkinter.Toplevel(self)
|
win = tkinter.Toplevel(self)
|
||||||
self.tkprogram = revpiprogram.RevPiProgram(win, self.cli, self.revpiname)
|
self.tkprogram = revpiprogram.RevPiProgram(
|
||||||
|
win, self.cli, self.xmlmode, self.revpiname)
|
||||||
win.focus_set()
|
win.focus_set()
|
||||||
win.grab_set()
|
win.grab_set()
|
||||||
self.wait_window(win)
|
self.wait_window(win)
|
||||||
@@ -223,9 +243,7 @@ class RevPiPyControl(tkinter.Frame):
|
|||||||
self._btnstate()
|
self._btnstate()
|
||||||
self.mbar.entryconfig("PLC", state="disabled")
|
self.mbar.entryconfig("PLC", state="disabled")
|
||||||
self.var_conn.set("")
|
self.var_conn.set("")
|
||||||
|
|
||||||
self._closeall()
|
self._closeall()
|
||||||
|
|
||||||
tkmsg.showerror("Fehler", "Server ist nicht erreichbar!")
|
tkmsg.showerror("Fehler", "Server ist nicht erreichbar!")
|
||||||
|
|
||||||
def tmr_plcrunning(self):
|
def tmr_plcrunning(self):
|
||||||
@@ -250,6 +268,10 @@ class RevPiPyControl(tkinter.Frame):
|
|||||||
plcec = "RUNNING"
|
plcec = "RUNNING"
|
||||||
elif plcec == -2:
|
elif plcec == -2:
|
||||||
plcec = "FILE NOT FOUND"
|
plcec = "FILE NOT FOUND"
|
||||||
|
elif plcec == -9:
|
||||||
|
plcec = "PROGRAM KILLED"
|
||||||
|
elif plcec == -15:
|
||||||
|
plcec = "PROGRAMS TERMED"
|
||||||
elif plcec == 0:
|
elif plcec == 0:
|
||||||
plcec = "NOT RUNNING"
|
plcec = "NOT RUNNING"
|
||||||
self.var_status.set(plcec)
|
self.var_status.set(plcec)
|
||||||
|
|||||||
Reference in New Issue
Block a user