=====Радуга=====
\\
\\
\\
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()
{{ :python:application:colors.png?200 |}}