(habe dabei versucht vieles von den Befehlsabfolgen bei den jeweils gedrückten Buttons, etc..rauszuschmeissen, sodas dieser übersichtlicher/lesbarer wird).
Um was es geht: ich möchte mit den Buttons zB unterschiedlichste Lichter/Lämpchen auf meiner Modellbahnanlage mittels Raspberry Pi und GPIOs sowie MCP23017 ansteuern....
...und natürlich sollte der eine oder andere Button dann auch auf Wunsch "mehrere" Lämpchen auf einmal schalten (also zB die Gebäude-Lichter in einem ganzen Strassenzug)
was ich dazu gerne hätte, ist dass zB bei Betätigung des Buttons "links oben"....einige/alle anderen Buttons "ihren Zustand optisch wechseln" (und dann natürlich auch hinterlegte Befehlsfolgen ablaufen)
ich hoffe, dies hilft zum besseren Verständnis meines Problems....sorry, dass ich Euch so bemühe.
Code: Alles auswählen
from tkinter import *
from functools import partial
import time
import sys
########Definition der Variablen
#listenelemente_max_spalten=3
listenelemente_max_zeilen=7
position_dir={'Start':0}
matrixname= 'Lichtermatrix'
fenster_max_spalten=5 # Spalten(in jeder Reihe)
fenster_max_reihen=listenelemente_max_zeilen//fenster_max_spalten
if (listenelemente_max_zeilen%fenster_max_spalten)>0:
fenster_max_reihen=fenster_max_reihen + 1
fenster_width=12
fenster_height=3
#####################################
########Definition des Listenarrays
hauptliste = [["0=Position","1=Bezeichnung", "2=Adresse","3=Ein/Aus","4=MCS23017-Hex-Adresse","5=MCS-Bank","6=MCS-Adresse"]]
hauptliste =hauptliste + [[ 1,"Alle Lichter","ALLE","E/A(0,1)",0,"leer",0]]
# Pos0, Pos1 , Pos2, Pos3, Pos4, Pos5, P6
hauptliste =hauptliste + [[ 2,"Licht 2", 29, 0, 0, "A", 0]]
hauptliste =hauptliste + [[ 3,"Licht 3", 31, 1, 0, "A", 0]]
hauptliste =hauptliste + [[ 4,"Licht 4", 33, 0, 0, "A", 0]]
for ii in range (4,listenelemente_max_zeilen):
hauptliste =hauptliste +[[ii+1,"Licht, Lampe."+str(ii+1).zfill(3),37,0,0,"",0]]
def bei_mausklick(geklickt):
if hauptliste[geklickt][3]==1:
print ("mach was EIN")
elif hauptliste[geklickt][3]==0:
print ("mach was AUS")
def toggle1(button):
geklickt=position_dir[str(button)]
if geklickt == 1:
button.flash() #damit blinkt der Button kurz
print ("270 hier sollte dann ALLE Lichter geschalten werden...und alle Buttons entsprechend zB die Farbe ändern")
elif geklickt <= listenelemente_max_zeilen:
button.state = not button.state
zw_text = hauptliste[geklickt][1]+" "+str(hauptliste[geklickt][2])+" "+str(hauptliste[geklickt][4])+" "+hauptliste[geklickt][5]+" "+str(hauptliste[geklickt][6])
if button.state == 1:
button['text'] = zw_text + " AUS"
button.config (bg='brown')
hauptliste[geklickt][3]=0
if button.state == 0:
button['text'] = zw_text + " EIN"
button.config (bg='light green') # von MO
hauptliste[geklickt][3]=1
bei_mausklick(geklickt)
else:
print ("292 ########## Element nicht vorhanden (ausserhalb der vordefinierten Parameter!):")
def new1_btn(state,reihe,spalte,tot,position):
btn = Button()
btn.config(width=fenster_width, height=fenster_height,activebackground="yellow",activeforeground="black")
position[str(btn)]=tot+1
zw_text="FEHLT!"
if tot < listenelemente_max_zeilen:
zw_text=hauptliste[tot+1][1]+" " +str(hauptliste[tot+1][2])+" "+str(hauptliste[tot+1][4])+" "+hauptliste[tot+1][5]+" "+str(hauptliste[tot+1][6])
if hauptliste[tot+1][3]==0: btn.config (bg='brown')
elif hauptliste[tot+1][3]==1: btn.config (bg='light green')
else:
btn.config (bg='#E1D1A9') # farbe für den "Alles-Button"
else:
btn.state='disabled' # damit wird Button ausgegraut
btn.config (wraplength=fenster_width*8) #das ist scheinbar in Pixel!?
btn.config(text=zw_text,command = partial(toggle1, btn))
btn.state = bool(state)
try:
if hauptliste[tot+1][3]==1: btn.state = not btn.state # damit bei Erstaufbau die Buttondefinition (0/1) richtig ist
except: print(" 99 ist ausserhalb!...also kein Problem")
btn.grid(row=reihe,column=spalte,padx=4,pady=4)
return btn
#####################################
########Definition des Fensters
main0= Tk()
main0.title(matrixname)
for x in range (0,fenster_max_reihen):
for y in range (0,fenster_max_spalten):
z=x*fenster_max_spalten+y
new1_btn(main0,x,y,z,position_dir)
main0.mainloop()
sys.exit()