geht hier um eine kleine GUI zum Schalten eines 8-Relay-USB-Board.
Jedes Relais hat zum Schalten einen Button
Ich möchte die Buttons aber nicht nur mit Relay_x beschriften sondern...
1. die Beschriftung soll sich je nach Schaltzustand ändern
2. die Beschriftung soll individuell per Rechtklick veränderbar sein
Sprich, wenn ich per Rechtsklick auf den Button Relay_x drücke, soll sich ein Popup öffnen in dem ich für den Schaltzustand ON und OFF jeweils einen beliebigen Freitext eingeben kann.
Beim Schließen des Popups soll diese Benennung dann für den Button übernommen werden.
Ich habe diese Umstetzung bei folgendem Tool schon gesehen, hab aber kein Plan wie ich sowas umsetzen kann.
http://denkovi.com/usb-8-relay-manager
Durch meine begrentzen py Kenntnisse, hab ich leider kein Plan wie ich sowas angehen kann.
Für den Schaltzustand gibt es genügend Beispiele, aber eben nicht in Verbindung mit dem Freitext.
Wer sich jetzt fragt wie ich dann das untern geschafft habe... das hab ich so bekommen
Anpassungen / Änderung gehen noch, aber mit "grüner Wiese" hab ich Proleme (geht gar nicht )
Code: Alles auswählen
import tkinter
import sys
import serial
import time
from tkinter import Label
window = tkinter.Tk()
state = [0, 0, 0, 0, 0, 0, 0, 0]
relay = []
serPort = serial.Serial(timeout=0)
portnamev = ""
def clear():
portnamev = portname.get()
print(portnamev)
portname.delete(0, tkinter.END)
serPort.baudrate = 9600
serPort.port = portnamev
serPort.open()
portname.destroy()
label1.destroy()
insert.destroy()
for i in range(0, 8):
relayIndex = str(i)
string2 = ("relay read " + relayIndex + "\n\r")
string2 = string2.encode('utf-8')
serPort.write(string2)
response = serPort.read(25)
response = str(response)
if (response.find("off") > 0):
state[i] = 0
elif (response.find("on") > 0):
state[i] = 1
for i in range(0, 8):
if state[i]:
relay[i].configure(bg="green3")
else:
relay[i].configure(bg="grey55")
def Relaycont(x):
relayIndex = str(x)
print(x)
string1 = ("relay " + "on" + " " + relayIndex + "\n\r")
string2 = ("relay " + "off" + " " + relayIndex + "\n\r")
string2 = string2.encode('utf-8')
string1 = string1.encode('utf-8')
if(state[x]):
serPort.write(string2)
# tkinter.Label(window, text=string2).grid(row=4, column=2)
state[x] = 0
relay[x]["bg"] = "grey55"
else:
serPort.write(string1)
# tkinter.Label(window, text=string1).grid(row=4, column=2)
state[x] = 1
relay[x].configure(bg="green3")
def All_is_on():
for i in range(0, 8):
relayIndex = str(i)
string1 = ("relay " + "on" + " " + relayIndex + "\n\r")
string1 = string1.encode('utf-8')
serPort.write(string1)
state[i]=1
relay[i].configure(bg="green3")
def All_is_off():
string = "reset\n\r"
string = string.encode('utf-8')
serPort.write(string)
for i in range(0, 8):
relay[i].configure(bg="grey55")
state[i] = 0
window.title("8-Relay GUI")
window.labelfont = ('Calibri', 30, 'bold')
window.geometry ('250x270')
window.resizable(width=0, height=0)
#initialchek()
relay.append(1)
relay[0]=tkinter.Button(window,
text="Relay 0",
anchor="center",
foreground="black",
font="Calibri 12",
relief="raised",
width="10",
command=lambda: Relaycont(0))
relay[0].place(x=15, y=10, width=100, height=30)
relay.append(1)
relay[1]=tkinter.Button(window,
text="Relay 1",
anchor="center",
foreground="black",
font="Calibri 12",
relief="raised",
width="10",
command=lambda: Relaycont(1))
relay[1].place(x=15, y=50, width=100, height=30)
relay.append(1)
relay[2]=tkinter.Button(window,
text="Relay 2",
anchor="center",
foreground="black",
font="Calibri 12",
relief="raised",
width="10",
command=lambda: Relaycont(2))
relay[2].place(x=15, y=90, width=100, height=30)
relay.append(1)
relay[3]=tkinter.Button(window,
text="Relay 3",
anchor="center",
foreground="black",
font="Calibri 12",
relief="raised",
width="10",
command=lambda: Relaycont(3))
relay[3].place(x=15, y=130, width=100, height=30)
relay.append(1)
relay[4]=tkinter.Button(window,
text="Relay 4",
anchor="center",
foreground="black",
font="Calibri 12",
relief="raised",
width="10",
command=lambda: Relaycont(4))
relay[4].place(x=130, y=10, width=100, height=30)
relay.append(1)
relay[5]=tkinter.Button(window,
text="Relay 5",
anchor="center",
foreground="black",
font="Calibri 12",
relief="raised",
width="10",
command=lambda: Relaycont(5))
relay[5].place(x=130, y=50, width=100, height=30)
relay.append(1)
relay[6]=tkinter.Button(window,
text="Relay 6",
anchor="center",
foreground="black",
font="Calibri 12",
relief="raised",
width="10",
command=lambda: Relaycont(6))
relay[6].place(x=130, y=90, width=100, height=30)
relay.append(1)
relay[7]=tkinter.Button(window,
text="Relay 7",
anchor="center",
foreground="black",
font="Calibri 12",
relief="raised",
width="10",
command=lambda: Relaycont(7))
relay[7].place(x=130, y=130, width=100, height=30)
relay.append(1)
for i in range(0, 8):
if state[i]:
relay[i].configure(bg="green3")
else:
relay[i].configure(bg="grey55")
relay[8]=tkinter.Button(window,
text="all Relays on",
anchor="center",
foreground="black",
font="Calibri 12",
relief="raised",
width="10",
background="grey75",
command=lambda: All_is_on())
relay[8].place(x=15, y=170, width=100, height=30)
relay.append(1)
relay[9]=tkinter.Button(window,
text="all Relays off",
anchor="center",
foreground="black",
font="Calibri 12",
relief="raised",
width="10",
background="grey75",
command=lambda: All_is_off())
relay[9].place(x=130, y=170, width=100, height=30)
label1=tkinter.Label(window,
text="enter COM-Port",
anchor="center",
font="Calibri 12",
fg="black")
label1.place(x=15, y=220, width=100, height=30)
portname=tkinter.Entry(window)
portname.place(x=120, y=220, width=50, height=30)
insert=tkinter.Button(window,
text='Insert',
anchor="center",
foreground="black",
font="Calibri 12",
relief="raised",
width="10",
command=lambda: clear())
insert.place(x=180, y=220, width=50, height=30)
window.mainloop()
Sven