使用Entry和按钮更改tkinter矩形的颜色

时间:2017-09-18 21:23:25

标签: python tkinter

超级新编码,我有一个带有5个矩形的tkinter GUI,一个输入框和一个标记为go的按钮。我希望能够根据我点击后输入到输入框中的数字来更改矩形的颜色。我不认为我关闭了吗?但我不知道该怎么做。帮助将不胜感激。感谢

from tkinter import *


the_window = Tk()


the_window.title('Show Text Count')


def changelbl():
number=(numberx.get())
if (numberx == 1):
    label1.config(fill='green')




numberx=StringVar()        


canvas = Canvas(the_window, width=270, height=20)
canvas.pack()
label1 = canvas.create_rectangle(0, 0, 50, 20, fill='grey')
label2 = canvas.create_rectangle(55, 0, 105, 20, fill='grey')
label3 = canvas.create_rectangle(110, 0, 160, 20, fill='grey')
label4 = canvas.create_rectangle(165, 0, 215, 20, fill='grey')
label5 = canvas.create_rectangle(220, 0, 270, 20, fill='grey')

Entrybox = Entry(the_window, bg='grey', width=15, textvariable=numberx)
Entrybox.pack(padx=(60,0), side=LEFT)

Gobutton = Button(the_window, text='Go',command=changelbl)
Gobutton.config(height=1, width=5)
Gobutton.pack(padx=(15,0), side=LEFT)

3 个答案:

答案 0 :(得分:0)

尝试使用canvas.itemconfig(label, fill = 'whatever')

此外,您需要在定义函数后修复缩进。

更改if number == "1",因为stringVar()的值将是一个字符串。

def changelbl():
    number = (numberx.get())
    if number == '1':
        canvas.itemconfig(label1, fill='green')

答案 1 :(得分:0)

这是一个更正版本,可在entrybox输入数字后更改矩形颜色,然后按Go button

from tkinter import *

the_window = Tk()
the_window.title('Show Text Count')

def on_Go_button():
    try:
        num = int(entrybox.get())
    except:
        num = 3
    num = num % 5
    canvas.itemconfig(num, fill='green')

numberx=StringVar()        

canvas = Canvas(the_window, width=270, height=20)
canvas.pack()

pos = [(0, 0, 50, 20), (55, 0, 105, 20), (110, 0, 160, 20), (165, 0, 215, 20), (220, 0, 270, 20)]
rectangles = [None for _ in range(5)]
for idx in range(5):
    rectangles[idx] = canvas.create_rectangle(*pos[idx], fill='grey')

entrybox = Entry(the_window, bg='grey', width=15, textvariable=numberx)
entrybox.pack(padx=(60,0), side=LEFT)

gobutton = Button(the_window, text='Go',command=on_Go_button)
gobutton.config(height=1, width=5)
gobutton.pack(padx=(15,0), side=LEFT)

the_window.mainloop()

答案 2 :(得分:0)

这可能不像你想要的那么简单,但希望它会有所帮助。

我认为创建课程是获得理想结果的更好方法。我还更改了changelbl以允许从字典中检索多个颜色选项。

在您的代码中,您错过了将开始运行tkinter窗口的行the_window.mainloop()

from tkinter import *


class ColorBoxes:
    def __init__(self, the_window):
        self.root = the_window
        self.root.title('Show Text Count')

        self.canvas = Canvas(self.root, width=270, height=20)
        self.canvas.pack()

        self.label1 = self.canvas.create_rectangle(0, 0, 50, 20, fill='grey')
        self.label2 = self.canvas.create_rectangle(55, 0, 105, 20, fill='grey')
        self.label3 = self.canvas.create_rectangle(110, 0, 160, 20, fill='grey')
        self.label4 = self.canvas.create_rectangle(165, 0, 215, 20, fill='grey')
        self.label5 = self.canvas.create_rectangle(220, 0, 270, 20, fill='grey')

        self.entry_box = Entry(self.root, bg='grey', width=15,)
        self.entry_box.pack(padx=60, side=LEFT)

        self.go_button = Button(self.root, text='Go', command=self.changelbl)
        self.go_button.config(height=1, width=5)
        self.go_button.pack(padx=15, side=LEFT)

    def changelbl(self):
        number = self.entry_box.get()
        fill_colors = {
            '1': 'green',
            '2': 'yellow',
            '3': 'red'
            # can add more colors to this dictionary if needed
        }

        self.canvas.itemconfig(self.label1, fill=fill_colors.get(number))
        self.canvas.itemconfig(self.label2, fill=fill_colors.get(number))
        self.canvas.itemconfig(self.label3, fill=fill_colors.get(number))
        self.canvas.itemconfig(self.label4, fill=fill_colors.get(number))
        self.canvas.itemconfig(self.label5, fill=fill_colors.get(number))


the_window = Tk()
ColorBoxes(the_window)
the_window.mainloop()

同样,这可能比你想要的更多,但希望你可以了解正在发生的事情并学习一点!祝你好运!