Содержание

Радуга




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()