from tkinter import * def setColor(name, code): l['text'] = name ent.delete(0, END) ent.insert(0, code) root = Tk() root.title('Радуга') root.iconbitmap('python.ico') l = Label(root, text='') l.pack(fill=X) ent = Entry(root, justify=CENTER) ent.pack(fill=X) Button(root,bg='#ff0000', width='30', command=lambda: setColor('Красный', '#ff0000')).pack(fill=X) Button(root,bg='#ffbf00', width='30', command=lambda: setColor('Оранжевй', '#ff7700')).pack(fill=X) Button(root,bg='#ffff55', width='30', command=lambda: setColor('Желтый', '#ffdd00')).pack(fill=X) Button(root,bg='#00ff00', width='30', command=lambda: setColor('Зеленый', '#00ff00')).pack(fill=X) Button(root,bg='#00ffff', width='30', command=lambda: setColor('Голубой', '#00ffff')).pack(fill=X) Button(root,bg='#0000ff', width='30', command=lambda: setColor('Синий', '#0000ff')).pack(fill=X) Button(root,bg='#8f00ff', width='30', command=lambda: setColor('Фиолетовый', '#8f00ff')).pack(fill=X) root.mainloop()
Важный момент, lambda функция вместо переменных хранит указатели на них, поэтому необходимо указывать явно параметры функции, как показанно ниже:
from tkinter import * def setColor(name, code): l['text'] = name ent.delete(0, END) ent.insert(0, code) colors = { '#ff0000': 'Красный', '#ff7d00': 'Оранжевый', '#ffff00': 'Желтый', '#00ff00': 'Зеленый', '#007dff': 'Голубой', '#0000ff': 'Синий', '#7d00ff': 'Фиолетовый' } root = Tk() root.title('Радуга 2') root.iconbitmap('python.ico') l = Label(root, text='') l.pack(fill=X) ent = Entry(root, width=30, justify=CENTER) ent.pack(fill=X) for code, color in colors.items(): Button(root, bg=code, command = lambda color=color, code=code: setColor(color, code)).pack(fill=X) root.mainloop()
В противном случае кнопки будут сгенерированы с одинаковым callback
from tkinter import * colors = { '#ff0000': 'Красный', '#ff7d00': 'Оранжевый', '#ffff00': 'Желтый', '#00ff00': 'Зеленый', '#007dff': 'Голубой', '#0000ff': 'Синий', '#7d00ff': 'Фиолетовый' } class MyButton(): def __init__(self, master, color, code): self.color = color self.code = code self.master = master self.btn = Button(master, bg=code, command=self.setColor) self.btn.pack(fill=X) def setColor(self): l['text'] = self.color ent.delete(0, END) ent.insert(0, self.code) root = Tk() root.title('Радуга 2') root.iconbitmap('python.ico') l = Label(root, text='') l.pack(fill=X) ent = Entry(root, width=30, justify=CENTER) ent.pack(fill=X) for code, color in colors.items(): MyButton(root, color, code) root.mainloop()