Mundo em Python

Conversor de cores (RGB ↔ HEX)

from tkinter import *
from tkinter import ttk root = Tk() def clamp_int(value, nome):
try:
v = int(value)
if v < 0: v = 0
if v > 255: v = 255
return v
except ValueError:
raise ValueError(f"Valor inválido para {nome}") class AppConverter():
def __init__(self):
self.root = root
self.janela()
self.frames_da_janela()
self.widgets_frame1()
self.Menus()
root.mainloop() def janela(self):
self.root.title("Conversor de cores (RGB ↔ HEX)")
self.root.configure(background='#1e3743')
self.root.geometry("400x400")
self.root.resizable(0,0) def frames_da_janela(self):
self.frame_1 = Frame(self.root, bd=4,
bg='#dfe3ee',
highlightbackground='#759fe6',
highlightthickness=2)
self.frame_1.place(relx=0.02, rely=0.02,
relwidth=0.96, relheight=0.96) def widgets_frame1(self):
self.abas = ttk.Notebook(self.frame_1)
self.RGB_HEX = Frame(self.abas)
self.HEX_RGB = Frame(self.abas) self.RGB_HEX.configure(background="#dfe3ee")
self.HEX_RGB.configure(background="#dfe3ee") self.abas.add(self.RGB_HEX, text="RGB → HEX")
self.abas.add(self.HEX_RGB, text="HEX → RGB")
self.abas.place(relx=0, rely=0, relwidth=0.98, relheight=0.98) # ---------------- RGB → HEX ----------------
self.r = StringVar()
self.lb_r = Label(self.RGB_HEX, text="R (0-255):",
bg='#dfe3ee', fg='#107db2', font=("Arial","15","bold"))
self.lb_r.place(relx=0.15, rely=0.05)
self.r_entry = Entry(self.RGB_HEX, textvariable=self.r,
justify='center', font=("Arial","15","bold"))
self.r_entry.place(relx=0.5, rely=0.05, relwidth=0.4) self.g = StringVar()
self.lb_g = Label(self.RGB_HEX, text="G (0-255):",
bg='#dfe3ee', fg='#107db2', font=("Arial","15","bold"))
self.lb_g.place(relx=0.15, rely=0.2)
self.g_entry = Entry(self.RGB_HEX, textvariable=self.g,
justify='center', font=("Arial","15","bold"))
self.g_entry.place(relx=0.5, rely=0.2, relwidth=0.4) self.b = StringVar()
self.lb_b = Label(self.RGB_HEX, text="B (0-255):",
bg='#dfe3ee', fg='#107db2', font=("Arial","15","bold"))
self.lb_b.place(relx=0.15, rely=0.35)
self.b_entry = Entry(self.RGB_HEX, textvariable=self.b,
justify='center', font=("Arial","15","bold"))
self.b_entry.place(relx=0.5, rely=0.35, relwidth=0.4) self.bt_calcular1 = Button(self.RGB_HEX, text="Converter",
bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'),
command=self.butaoclick1)
self.bt_calcular1.place(relx=0.3, rely=0.55, relwidth=0.45, relheight=0.15) self.resultado_HEX = StringVar()
self.lb_resultado1 = Label(self.RGB_HEX, text="HEX:",
font=("Arial","15","bold"),
bg='#dfe3ee', fg='#107db2')
self.lb_resultado1.place(relx=0.15, rely=0.8)
self.resultado1 = Label(self.RGB_HEX, textvariable=self.resultado_HEX,
font=("Arial","13","bold"))
self.resultado1.place(relx=0.4, rely=0.8, relwidth=0.5) # ---------------- HEX → RGB ----------------
self.hex_value = StringVar()
self.lb_HEX = Label(self.HEX_RGB, text="HEX (ex: #1a2b3c ou 1a2b3c):",
bg='#dfe3ee', fg='#107db2', font=("Arial","15","bold"))
self.lb_HEX.place(relx=0.05, rely=0.15)
self.hex_entry = Entry(self.HEX_RGB, textvariable=self.hex_value,
justify='center', font=("Arial","15","bold"))
self.hex_entry.place(relx=0.05, rely=0.3, relwidth=0.9) self.bt_calcular2 = Button(self.HEX_RGB, text="Converter",
bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'),
command=self.butaoclick2)
self.bt_calcular2.place(relx=0.3, rely=0.5, relwidth=0.45, relheight=0.15) self.resultado_RGB = StringVar()
self.lb_resultado2 = Label(self.HEX_RGB, text="RGB:",
font=("Arial","15","bold"),
bg='#dfe3ee', fg='#107db2')
self.lb_resultado2.place(relx=0.2, rely=0.8)
self.resultado2 = Label(self.HEX_RGB, textvariable=self.resultado_RGB,
font=("Arial","13","bold"))
self.resultado2.place(relx=0.4, rely=0.8, relwidth=0.5) def butaoclick1(self):
try:
r = clamp_int(self.r.get(), "R")
g = clamp_int(self.g.get(), "G")
b = clamp_int(self.b.get(), "B")
mensagem = f"#{r:02X}{g:02X}{b:02X}"
except ValueError:
mensagem = "Entrada inválida."
self.resultado_HEX.set(mensagem) def butaoclick2(self):
hex_code = self.hex_value.get().strip().replace("#", "")
if len(hex_code) != 6:
self.resultado_RGB.set("Formato inválido.")
return
try:
r = int(hex_code[0:2], 16)
g = int(hex_code[2:4], 16)
b = int(hex_code[4:6], 16)
mensagem = f"({r}, {g}, {b})"
except ValueError:
mensagem = "Valor inválido."
self.resultado_RGB.set(mensagem) def Quit(self):
self.root.destroy() def Menus(self):
menubar = Menu(self.root)
self.root.config(menu=menubar)
filemenu = Menu(menubar, tearoff=0)
menubar.add_cascade(label="Opções", menu=filemenu)
filemenu.add_command(label="Sair", command=self.Quit)
AppConverter()
0