Tkinter - Как изменить цвет фона метки, если пользовательский ввод удовлетворен использованием сетки - PullRequest
0 голосов
/ 15 января 2020

Моя цель - изменить цвет этикетки, чтобы он соответствовал цвету рамки, чтобы они выглядели красиво и гладко. Это мой первый программный проект, поэтому помощь очень ценится. Спасибо.

import tkinter as tk


class Main:
    def __init__(self):
        self.root = tk.Tk()
        self.root.geometry("250x300-1200-400")

        # input field stored
        self.input_a = tk.StringVar()

        # label
        label = tk.Label(self.root, text="Enter Value")
        label.grid(row=0, column=0)

        # input field
        input_color_changer = tk.Entry(self.root, textvariable=self.input_a)
        input_color_changer.grid(row=0, column=1)

        button = tk.Button(self.root, text="Run", command=self.color_changer)
        button.grid(row=1, column=1)


        self.root.mainloop()


    def color_changer(self):
        input_b = self.input_a.get()

        if input_b == "r":
            self.root["bg"] = "red"
            self.label["bg"] = "red" # <--- code in question
        if input_b == "y":
            self.root["bg"] = "yellow"
        if input_b == "g":
            self.root["bg"] = "green"



Main()

1 Ответ

0 голосов
/ 15 января 2020

Вам необходимо определить label как атрибут класса. Прямо сейчас это просто переменная в методе init.

Для этого добавьте префикс self..

Вот ваш код, немного обновленный для наследования от Tk() и используйте атрибут класса для метки.

import tkinter as tk


class Main(tk.Tk):
    def __init__(self):
        super().__init__()
        self.geometry("250x300-1200-400")
        self.input_a = tk.StringVar()
        self.label = tk.Label(self, text="Enter Value")
        self.label.grid(row=0, column=0)
        tk.Entry(self, textvariable=self.input_a).grid(row=0, column=1)
        tk.Button(self, text="Run", command=self.color_changer).grid(row=1, column=1)

    def color_changer(self):
        input_b = self.input_a.get()
        print(input_b)
        if input_b == "r":
            self["bg"] = "red"
            self.label["bg"] = "red"
        if input_b == "y":
            self["bg"] = "yellow"
        if input_b == "g":
            self["bg"] = "green"


if __name__ == '__main__':
    Main().mainloop()

Результаты:

enter image description here

...