2016-08-20 4 views
-1

Ich versuche, einen GUI-BMI-Rechner für die Sommerarbeit zu erstellen. Ich möchte ein Feature implementieren, bei dem, sobald Sie den BMI berechnet haben, sich die Farbe des Labels je nach Ihrem BMI ändert.Wie erstelle ich eine dynamische Labelfarbe in Tkinter?

Mein aktueller Code lautet:

self.AnswerlabelVariable = tkinter.StringVar() #Creates a variable used later for changing the label text 
Answerlabel = tkinter.Label(self, text=u" ", textvariable=self.AnswerlabelVariable, anchor='w', fg="black",bg="light grey") #Creates a label 
Answerlabel.grid(column=1,row=4, sticky='EW') #Defines where the label is and how it will move 


...the calculation for the BMI happens... 


if float(BMI2)<int(17): #Creates an 'if' statement 
    self.MessagelabelVariable.set("You are underweight!") #Changes a label to display a new message. 
    self.AnswerlabelVariable.set(fg='black', bg='blue') #Changes a labels colour (WIP WIP WIP) 

Während das Label seinen Text ändert, wird die Farbe nicht ändern und stattdessen eine Fehlermeldung;

line 56, in OnCalculateButtonClick 
self.AnswerlabelVariable.set(fg='black', bg='blue') #Changes a labels colour (WIP WIP WIP) 
TypeError: set() got an unexpected keyword argument 'fg' 

Kann jemand helfen?

Antwort

1

Sie benötigen die config() Methode des Etiketts zu verwenden, seine fg und bg Eigenschaften zu modifizieren, wie folgt aus:

self.Answerlabel.config(fg='black', bg='blue') #Changes a labels colour 
+0

Ich habe das versucht. Wenn ich es in den Code einfüge, erhalte ich den folgenden Fehler: self.AnswerlabelVariable.configure (fg = 'schwarz', bg = 'blau') #Änderungen einer Etikettenfarbe (WIP WIP WIP) AttributError: 'StringVar' Objekt hat kein Attribut 'configure' –

+0

Ja, Sie müssen 'configure' auf dem Label 'Answerlabel' aufrufen. Ich werde meine Antwort aktualisieren! Dies liegt daran, dass die AnswerlabelVariable nicht dafür verantwortlich ist, wie das Label aussieht, das Sie ändern möchten. Es enthält nur den Text, den es anzeigen soll. Sie müssen also das Label-Objekt konfigurieren, nicht seine Textvariable. – Dartmouth

+0

Ich habe die folgende Fehlermeldung erhalten, als ich den neuen, bearbeiteten Code ausprobierte: 'AttributError: '_tkinter.tkapp' Objekt hat kein Attribut 'AnswerLabel'' Außerdem habe ich den Code als' self.config.Answerlabel (fg = 'schwarz', bg = 'blau') 'um den Fehler zu bekommen 'AttributError:' Funktion 'Objekt hat kein Attribut' MessageLabel'' Und übrigens danke für deine weitere Hilfe :) –

1

Ich habe nie die StringVar-Klasse verwendet, aber wann immer ich die Farbe (oder einen Parameter) eines Labels ändern wollte, würde ich es einfach direkt machen.

Answerlabel['fg'] = 'black' 
+2

Das 'tkinter' Modul stellt die' config() 'oder' configure () 'Funktion, um die Eigenschaften von Widgets zu ändern, es sieht sauberer als eine neue Zeile für jeden zu ändernden Parameter. – Dartmouth

+0

Danke, dass Sie mich wissen lassen :) – KnowNothing

+0

'self.Answerlabel ['fg'] = 'black' #Änderungen der Beschriftungsfarbe (WIP WIP WIP)' Gibt mir den Fehler 'AttributeError: '_tkinter.tkapp' Objekt hat kein Attribut ' Answerlabel'' –

Verwandte Themen