Discorso di una certa complessità, non breve da descrivere esaustivamente, esistono diverse possibilità per conoscere il valore di una variabile all'interno di una funzione, o metodo come nel Tuo caso, la più "immediata" sarebbe passare la variabile da valutare quale parametro della funzione, ciò significherebbe dover trasformare la definizione della Tua funzione "press" come segue
def press(self, var: bool) -> None:
N.B. - ho utilizzato la
notazione con il typing giusto per chiarire il tipo di variabili in gioco, non è una notazione d'obbligo.
La conseguenza di tale differenza sarebbe che dovresti invocare detta funzione con un valore posizionale booleano (True o False) in corrispondenza di "var" ... a parte le possibili implicazioni sulla codifica, il passaggio dei parametri ad una funzione ha un articolato insieme di regole, una lettura del
capitolo 4.8 del tutorial potrebbe chiarire le idee in merito.
Per altro, si potrebbe "giocare" con le regole di visibilità delle variabili, altro argomento articolato, non complicato ma inizialmente molto duro da digerire, un buon libro aiuterebbe senz'altro sull'argomento, che in ogni caso è da capire molto bene, ma una ricerca in rete potrà dare molti esempi superficiali,
tipo questo scelto a caso.
Comunque, il discorso si complica ulteriormente dato che nel Tuo codice si sta utilizzando una classe, perché potrebbero entrare in gioco i concetti di "variabili di classe" e "variabili di istanza" ed in ogni caso un livello aggiuntivo sulla visibilità su cui
i capitoli 9.1 - 9.2 del tutorial potrebbero darti una introduzione.
Dopo queste opportune premesse, ovviamente da approfondirsi, che soprassiedono il design del codice da farsi, e chiarendo che lascia il tempo che trova, essendo la strutturazione d'insieme del codice ciò che obbliga, provo a dirti ciò che faccio io in linea generale quando mi occorre in una mia classe una stessa condizione di controllo in più metodi della stessa classe :
- definirei, valorizzandola, una variabile di istanza (p.e. self.var) in fase di instanziamento (nello __init__);
- utilizzerei tale variabile di istanza nelle fasi decisionali che lo richiedono;
- nel caso le condizioni dovessero essere stabilite all'estero della classe definirei un setter.
Una schematizzazione di tali accorgimenti potrebbe essere :
class MyLayout(tk.Label):
def __init__(self, parent, *args, **kwargs):
...
self.window = parent
self.var = True
...
super().__init__(self.window, *.args, **kwargs)
def start(self):
if (self.var):
self.configure(text = "Switch ON")
else:
self.configure(text = "Switch OFF")
def press(self):
if self.val == True:
self.window.clearcolor =(39/255,37/255,40/255,0.8/255)
@property
def switch(self):
''' Restituisce lo stato di "switch" del widget '''
return self.var
@switch.setter
def switch(self, value):
''' Imposta lo stato di "switch" del widget '''
self.var = value
Tale "impostazione" è fatta perché, dal Tuo codice, ho l'impressione che Tu voglia sub-classare una label per farla agire "diversamente" rispetto ad una determinata condizione, la sostituzione di "Widget" con "tk.Label" perché non tutti i widget hanno la proprietà "text" ed ho interpretato il tuo "Window" quale il "parent" (oggetto contenitore) della label ... non è detto che la mia interpretazione sia calzante alla situazione, ma si può ben poco con l'andar di notte e indovinare
Edit : corretta l'istruzione " if val == True:" in "press"