from tkinter import *
class Information():
def __init__(self, master):
self.master = master
self.load_dict_label()
self.display()
def display(self):
for i in self.location_and_condition_label:
bg_to_label = self.location_and_condition_label[i]["color"]
row_to_label = self.location_and_condition_label[i]["row"]
column_to_label = self.location_and_condition_label[i]["column"]
text_to_label = self.location_and_condition_label[i]["text"]
self.i = Label(self.master, font=("Courier", 14), text= text_to_label, bg=bg_to_label).grid(row=row_to_label, column=column_to_label, padx=5, pady=5)
For the example I chose random values.
def load_dict_label(self):
color = "red"
self.location_and_condition_label = {
"0000": {"column": 0, "row": 0, "text": "5:00", "color": color},
"0001": {"column": 1, "row": 0, "text": "Getting up", "color": color},
"0002": {"column": 2, "row": 0, "text": "Wash face", "color": color},
"0003": {"column": 3, "row": 0, "text": "Get dress", "color": color},
"0004": {"column": 0, "row": 1, "text": "6:00", "color": color},
"0005": {"column": 1, "row": 1, "text": "Drink coffee", "color": color},
"0006": {"column": 2, "row": 1, "text": "Read newspaper", "color": color},
"0007": {"column": 0, "row": 2, "text": "7:00", "color": color},
"0008": {"column": 1, "row": 2, "text": "Turn on tv", "color": color},
"0009": {"column": 2, "row": 2, "text": "Drink coffee", "color": color},
"0010": {"column": 3, "row": 2, "text": "Wake the child", "color": color},
"0011": {"column": 4, "row": 2, "text": "Organize the\n child", "color": color},
"0012": {"column": 5, "row": 2, "text": "Make us \nbreakfast", "color": color},
"0013": {"column": 0, "row": 3, "text": "8:00", "color": color},
"0014": {"column": 1, "row": 3, "text": "To go \nto work", "color": color},
"0015": {"column": 2, "row": 3, "text": "Say hello to\neveryone", "color": color},
"0016": {"column": 0, "row": 4, "text": "9:00", "color": color},
"0017": {"column": 1, "row": 4, "text": "Make a morning\ncall", "color": color},
"0018": {"column": 2, "row": 4, "text": "Start working", "color": color},
"0019": {"column": 3, "row": 4, "text": "Drink coffee", "color": color}
}
This function I want to change that instead of producing a new one I want to update an old function and display on window.
def update_label(self):
self.location_and_condition_label["0010"]["color"] = "green"
self.display()
class MainPanel():
def __init__(self, master):
self._master = master
self._master.configure(background="#929591")
self._nformation = Information(self._master)
self.running = True
def run(self):
if self.running == True:
self._nformation.update_label()
self._master.after(5000, app.run)
if __name__ == "__main__":
root = Tk()
app = MainPanel(root)
root.after(5000, app.run)
root.mainloop()
CodePudding user response:
You can store the labels in a dictionary, and then use the configure method to change the color.
def display(self):
for i in self.location_and_condition_label:
...
label = Label(self.master, font=("Courier", 14), text= text_to_label, bg=bg_to_label)
label.grid(row=row_to_label, column=column_to_label, padx=5, pady=5)
self.labels[i] = label
def update_label(self):
self.location_and_condition_label["0002"]["color"] = "green"
self.labels["0002"].configure(background="green")
Things to notice:
- the creation of the label and calling
gridare separate, so thatlabelis set to the actual label widget - we add the label to a dictionary named
self.labels update_labeldoes not need to calldisplay, sincedisplaycreates new labels each time it is called. Instead, we call theconfiguremethod on the specific label
Alternately, you could modify display to only create the widget if it doesn't exist, and then always use configure to update it to the current specification. The solution would then look something like this:
def __init__(self, master):
self.master = master
self.labels = {} # initialize self.labels to an empty dictionary
self.load_dict_label()
self.display()
def display(self):
for i in self.location_and_condition_label:
...
if i not in self.labels:
# create the label if it hasn't been created
label = Label(self.master, font=("Courier", 14))
label.grid(row=row_to_label, column=column_to_label, padx=5, pady=5)
self.labels[i] = label
# update the label with the stored configuration values
self.labels[i].configure(
text= text_to_label, bg=bg_to_label
)
def update_label(self):
self.location_and_condition_label["0002"]["color"] = "green"
self.display()
