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

Я пытаюсь изменить цвет рамки на черный, если пользователь вводит «b», зеленый, если пользователь вводит «g». Это то, что я имею до сих пор

Спасибо.

from tkinter import *

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

        # input field stored
        self.input_a = StringVar()

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

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


        root.mainloop()


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


        if input_b == "b":
            print("BLACK") # CHANGE COLOR OF FRAME TO BLACK
        if input_b == "g":
            print("GREEN") # CHANGE COLOR OF FRAME TO GREEN etc...

Main()

1 Ответ

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

Вы не вставляете событие Frame в окно (вы не используете pack() / grid() / place()), но если вы даже поместите его в окно, оно будет пустым, поэтому у него не будет высоты и ширина, поэтому вы не увидите разницы.

Лучше использовать root для этого, но вам нужно self.root для доступа к нему в другой функции, а затем вы можете сделать

self.root['bg'] = 'green'

# from tkinter import * # PEP8: not preferred
import tkinter as tk

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

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

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

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

        self.root.mainloop()


    def color_changer(self): # PEP8: lower_case_names for methods/functions/variables
        input_b = self.input_a.get()

        if input_b == "b":
            print("BLACK") # CHANGE COLOR OF FRAME TO BLACK
            self.root['bg'] = 'black'
        if input_b == "g":
            print("GREEN") # CHANGE COLOR OF FRAME TO GREEN etc...
            self.root['bg'] = 'green'

Main()
...