mirror of
https://github.com/naruxde/revpipycontrol.git
synced 2025-11-08 15:43:52 +01:00
Men? eingebaut
automatische Statusaktualisierung code style
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
|
||||
<!-- eric project file for project revpipycontrol -->
|
||||
<!-- Saved: 2017-02-27, 14:26:13 -->
|
||||
<!-- Saved: 2017-03-03, 16:51:50 -->
|
||||
<!-- Copyright (C) 2017 Sven Sager, akira@narux.de -->
|
||||
<Project version="5.1">
|
||||
<Language>en_US</Language>
|
||||
@@ -18,6 +18,7 @@
|
||||
<Source>revpipycontrol/revpipycontrol.py</Source>
|
||||
<Source>revpipycontrol/revpicheckclient.py</Source>
|
||||
<Source>setup.py</Source>
|
||||
<Source>revpipycontrol/revpiplclist.py</Source>
|
||||
</Sources>
|
||||
<Forms/>
|
||||
<Translations/>
|
||||
|
||||
@@ -73,7 +73,7 @@ class RevPiCheckClient(tkinter.Frame):
|
||||
|
||||
sleep(0.1)
|
||||
|
||||
def onFrameConfigure(self, canvas):
|
||||
def onfrmconf(self, canvas):
|
||||
canvas.configure(scrollregion=canvas.bbox("all"))
|
||||
|
||||
def _createiogroup(self, device, frame, iotype):
|
||||
@@ -88,13 +88,17 @@ class RevPiCheckClient(tkinter.Frame):
|
||||
canvas.pack(side="left", fill="both", expand=True)
|
||||
|
||||
canvas.create_window((4, 4), window=s_frame, anchor="nw")
|
||||
s_frame.bind("<Configure>", lambda event, canvas=canvas: self.onFrameConfigure(canvas))
|
||||
s_frame.bind(
|
||||
"<Configure>", lambda event, canvas=canvas: self.onfrmconf(canvas)
|
||||
)
|
||||
|
||||
rowcount = 0
|
||||
for io in self.cli.get_iolist(device, iotype):
|
||||
# io = [name,default,anzbits,adressbyte,export,adressid,bmk,bitaddress,tkinter_var]
|
||||
|
||||
tkinter.Label(s_frame, text=io[0]).grid(column=0, row=rowcount, sticky="w")
|
||||
tkinter.Label(s_frame, text=io[0]).grid(
|
||||
column=0, row=rowcount, sticky="w"
|
||||
)
|
||||
|
||||
if io[7] >= 0:
|
||||
var = tkinter.BooleanVar()
|
||||
@@ -103,16 +107,13 @@ class RevPiCheckClient(tkinter.Frame):
|
||||
check["text"] = ""
|
||||
check["variable"] = var
|
||||
check.grid(column=1, row=rowcount)
|
||||
#check.pack(anchor="e", side="right")
|
||||
else:
|
||||
var = tkinter.IntVar()
|
||||
#txt = tkinter.Spinbox(fra_group, to=256)
|
||||
txt = tkinter.Spinbox(s_frame, to=256)
|
||||
txt["state"] = "disabled" if iotype == "inp" else "normal"
|
||||
txt["width"] = 4
|
||||
txt["textvariable"] = var
|
||||
txt.grid(column=1, row=rowcount)
|
||||
#txt.pack(anchor="e", side="right")
|
||||
|
||||
# Steuerelementvariable in IO übernehmen
|
||||
io.append(var)
|
||||
@@ -211,7 +212,8 @@ class RevPiCheckClient(tkinter.Frame):
|
||||
def toggleauto(self):
|
||||
self.btn_read["state"] = "disabled" if self.autorw.get() else "normal"
|
||||
self.btn_write["state"] = "disabled" if self.autorw.get() else "normal"
|
||||
if self.autorw.get() and (self.fut_autorw is None or self.fut_autorw.done()):
|
||||
if self.autorw.get() \
|
||||
and (self.fut_autorw is None or self.fut_autorw.done()):
|
||||
e = ThreadPoolExecutor(max_workers=1)
|
||||
self.fut_autorw = e.submit(self._autorw)
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ from argparse import ArgumentParser
|
||||
from xmlrpc.client import ServerProxy, Binary
|
||||
|
||||
|
||||
class RevPiPyLogs(tkinter.Frame):
|
||||
class RevPiPlcLogs(tkinter.Frame):
|
||||
|
||||
def __init__(self, master, xmlcli):
|
||||
super().__init__(master)
|
||||
@@ -29,6 +29,7 @@ class RevPiPyLogs(tkinter.Frame):
|
||||
self.plcscr = tkinter.Scrollbar(self)
|
||||
self.plclog.pack(side="left", expand=True, fill="both")
|
||||
self.plcscr.pack(side="left", fill="y")
|
||||
# self.plclog["state"] = "disabled"
|
||||
self.plclog["yscrollcommand"] = self.plcscr.set
|
||||
self.plcscr["command"] = self.plclog.yview
|
||||
|
||||
@@ -37,6 +38,7 @@ class RevPiPyLogs(tkinter.Frame):
|
||||
self.appscr = tkinter.Scrollbar(self)
|
||||
self.appscr.pack(side="right", fill="y")
|
||||
self.applog.pack(side="right", expand=True, fill="both")
|
||||
# self.applog["state"] = "disabled"
|
||||
self.applog["yscrollcommand"] = self.appscr.set
|
||||
self.appscr["command"] = self.applog.yview
|
||||
|
||||
@@ -102,22 +104,33 @@ class RevPiPyControl(tkinter.Frame):
|
||||
self._createwidgets()
|
||||
|
||||
# Daten aktualisieren
|
||||
self.plcrunning()
|
||||
self.tmr_plcrunning()
|
||||
|
||||
def _createwidgets(self):
|
||||
"""Erstellt den Fensterinhalt."""
|
||||
# Hauptfenster
|
||||
self.master.wm_title("RevPi Python PLC Loader")
|
||||
|
||||
self.var_status = tkinter.StringVar()
|
||||
self.txt_status = tkinter.Entry()
|
||||
self.txt_status["textvariable"] = self.var_status
|
||||
self.txt_status.pack(fill="x")
|
||||
self.var_opt = tkinter.StringVar()
|
||||
self.lst_opt = [
|
||||
"Verbindungen...",
|
||||
"------------------",
|
||||
"PLC Log...",
|
||||
"PLC Monitor...",
|
||||
"PLC Optionen...",
|
||||
"------------------",
|
||||
"Beenden",
|
||||
]
|
||||
self.opt_menu = tkinter.OptionMenu(
|
||||
self, self.var_opt, *self.lst_opt, command=self._opt_do
|
||||
)
|
||||
self.opt_menu.pack(fill="x")
|
||||
|
||||
self.btn_plcrunning = tkinter.Button(self)
|
||||
self.btn_plcrunning["text"] = "PLC Status"
|
||||
self.btn_plcrunning["command"] = self.plcrunning
|
||||
self.btn_plcrunning.pack(fill="x")
|
||||
self.var_conn = tkinter.StringVar()
|
||||
self.txt_conn = tkinter.Entry(self)
|
||||
self.txt_conn["state"] = "readonly"
|
||||
self.txt_conn["textvariable"] = self.var_conn
|
||||
self.txt_conn.pack()
|
||||
|
||||
self.btn_plcstart = tkinter.Button(self)
|
||||
self.btn_plcstart["text"] = "PLC Start"
|
||||
@@ -144,9 +157,32 @@ class RevPiPyControl(tkinter.Frame):
|
||||
self.btn_plcrestart["command"] = self.plclogs
|
||||
self.btn_plcrestart.pack(fill="x")
|
||||
|
||||
self.var_status = tkinter.StringVar()
|
||||
self.txt_status = tkinter.Entry(self)
|
||||
self.txt_status["state"] = "readonly"
|
||||
self.txt_status["textvariable"] = self.var_status
|
||||
self.txt_status.pack()
|
||||
|
||||
def _opt_do(self, text):
|
||||
optselect = self.lst_opt.index(text)
|
||||
if optselect == 0:
|
||||
# Verbindungen
|
||||
pass
|
||||
elif optselect == 2:
|
||||
self.plclogs()
|
||||
elif optselect == 3:
|
||||
pass
|
||||
# self.plcmonitor()
|
||||
elif optselect == 4:
|
||||
# Optionen
|
||||
pass
|
||||
elif optselect == 6:
|
||||
self.master.destroy()
|
||||
self.var_opt.set("")
|
||||
|
||||
def plclogs(self):
|
||||
root = tkinter.Tk()
|
||||
self.tklogs = RevPiPyLogs(root, self.cli)
|
||||
self.tklogs = RevPiPlcLogs(root, self.cli)
|
||||
|
||||
def plcmonitor(self):
|
||||
root = tkinter.Tk()
|
||||
@@ -154,24 +190,20 @@ class RevPiPyControl(tkinter.Frame):
|
||||
|
||||
def plcstart(self):
|
||||
self.cli.plcstart()
|
||||
self.plcrunning()
|
||||
|
||||
def plcstop(self):
|
||||
self.cli.plcstop()
|
||||
self.plcrunning()
|
||||
|
||||
def plcrestart(self):
|
||||
self.cli.plcstop()
|
||||
self.cli.plcstart()
|
||||
self.plcrunning()
|
||||
|
||||
def plcrunning(self):
|
||||
def tmr_plcrunning(self):
|
||||
if self.cli.plcrunning():
|
||||
self.btn_plcrunning["activebackground"] = "green"
|
||||
self.btn_plcrunning["bg"] = "green"
|
||||
self.txt_status["readonlybackground"] = "green"
|
||||
else:
|
||||
self.btn_plcrunning["activebackground"] = "red"
|
||||
self.btn_plcrunning["bg"] = "red"
|
||||
self.txt_status["readonlybackground"] = "red"
|
||||
|
||||
plcec = self.cli.plcexitcode()
|
||||
if plcec == -1:
|
||||
plcec = "RUNNING"
|
||||
@@ -179,6 +211,8 @@ class RevPiPyControl(tkinter.Frame):
|
||||
plcec = "NOT RUNNING"
|
||||
self.var_status.set(plcec)
|
||||
|
||||
self.master.after(1000, self.tmr_plcrunning)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
root = tkinter.Tk()
|
||||
|
||||
Reference in New Issue
Block a user