O código em questão é uma aplicação em Python utilizando o tkinter
para criar uma interface gráfica de um sistema comercial que permite o gerenciamento de produtos e serviços. A seguir, é fornecida uma explicação detalhada do funcionamento de cada parte do código.
# -*- coding: cp1252 -*-
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
from PIL import Image, ImageTk
import conexao
import locale
Explicação:
# -*- coding: cp1252 -*-
: Especifica a codificação do arquivo como cp1252
, uma codificação de caracteres usada no Windows.tkinter
, ttk
, messagebox
, PIL
e conexao
são importados para criar a interface gráfica e manipular imagens, além de estabelecer conexão com o banco de dados. locale.setlocale(locale.LC_ALL, 'pt_BR.UTF-8')
Define a configuração regional para português do Brasil, formatando valores monetários de acordo com as convenções brasileiras.
tela_prod = tk.Tk()
tela_prod.geometry('1366x768+0+0')
tela_prod.state('zoomed')
tela_prod['bg'] = "gold"
tela_prod.title("Controle Comercial - Cadastro de Produtos/Serviços")
Explicação:
Inicializa a janela principal do aplicativo com uma resolução de 1366x768
, em modo maximizado, cor de fundo dourada e título definido.
tkimage_cli = ImageTk.PhotoImage(Image.open(r"C:\Controle\fundo_submodulos.jpg").resize((tela_prod.winfo_screenwidth(), tela_prod.winfo_screenheight())))
tk.Label(tela_prod, image=tkimage_cli).pack()
Carrega uma imagem de fundo e a redimensiona para cobrir toda a janela da aplicação.
def limpar():
txtcodigo.delete(0,"end")
txtdescricao.delete(0,"end")
cmbtipo.delete(0,"end")
txtquantidade.delete(0,"end")
txtcusto.delete(0,"end")
txtpreco.delete(0,"end")
txtcodigo.focus_set()
Limpa todos os campos de entrada e posiciona o cursor no campo de código.
def buscar():
var_codigo = txtcodigo.get()
con=conexao.conexao()
sql_txt = f"select codigo,descricao,tipo,quantidade,custo,preco from prodserv where codigo = {var_codigo}"
rs=con.consultar(sql_txt)
if rs:
limpar()
txtcodigo.insert(0, rs[0])
txtdescricao.insert(0, rs[1])
cmbtipo.insert(0,rs[2])
txtquantidade.insert(0,rs[3])
txtcusto.insert(0,locale.currency(rs[4]))
txtpreco.insert(0,locale.currency(rs[5]))
else:
messagebox.showwarning("Aviso", "Código não Encontrado",parent = tela_prod)
limpar()
txtcodigo.focus_set()
con.fechar()
Busca um produto pelo código e preenche os campos com as informações retornadas do banco de dados. Se o código não for encontrado, uma mensagem de aviso é exibida.
def duplo_click(event):
limpar()
item = tree.item(tree.selection())
txtcodigo.insert(0, item['values'][0])
buscar()
Ao dar um duplo clique em um item na lista, limpa os campos e os preenche com os dados do item selecionado.
def visualizar():
con=conexao.conexao()
sql_txt = "select * from prodserv order by descricao"
rs=con.consultar_tree(sql_txt)
tree.bind(" ", duplo_click)
for linha in tree.get_children():
tree.delete(linha)
for linha in rs:
tree.insert("", tk.END, values=linha)
Preenche a lista de produtos exibida na interface com os dados obtidos do banco de dados.
def gravar():
var_codigo = txtcodigo.get()
var_tipo = cmbtipo.get()
var_descricao = txtdescricao.get()
var_quantidade = txtquantidade.get()
var_custo = float(var_custo.replace('R$', '').strip().replace('.', '').replace(',', '.'))
var_preco = float(var_preco.replace('R$', '').strip().replace('.', '').replace(',', '.'))
con=conexao.conexao()
sql_txt = f"select codigo,descricao,tipo,quantidade,custo,preco from prodserv where codigo = '{var_codigo}'"
rs=con.consultar(sql_txt)
if rs:
sql_text = f"update prodserv set tipo='{var_tipo}',descricao='{var_descricao}',quantidade={var_quantidade},custo={var_custo},preco={var_preco} where codigo = '{var_codigo}'"
else:
sql_text = f"insert into prodserv(codigo,tipo,descricao,quantidade,custo,preco) values ('{var_codigo}','{var_tipo}','{var_descricao}',{var_quantidade},{var_custo},{var_preco})"
if con.gravar(sql_text):
messagebox.showinfo("Aviso", "Item Gravado com Sucesso",parent = tela_prod)
limpar()
else:
messagebox.showerror("Erro", "Houve um Erro na Gravação",parent = tela_prod)
con.fechar()
visualizar()
Salva ou atualiza as informações do produto no banco de dados. Se o código já existir, o produto é atualizado; caso contrário, é inserido um novo registro.
def excluir():
var_del = messagebox.askyesno("Exclusão", "Tem certeza que deseja excluir?",parent = tela_prod)
if var_del == True:
var_codigo = txtcodigo.get()
con=conexao.conexao()
sql_text = f"delete from prodserv where codigo = '{var_codigo}'"
if con.gravar(sql_text):
messagebox.showinfo("Aviso", "Item Excluído com Sucesso",parent = tela_prod)
limpar()
else:
messagebox.showerror("Erro", "Houve um Erro na Exclusão",parent = tela_prod)
con.fechar()
visualizar()
else:
limpar()
Exclui o produto do banco de dados após confirmar com o usuário.
def menu():
tela_prod.destroy()
Fecha a janela atual e retorna ao menu principal.
def limitador(*args): value = quant_entry.get() if len(value) > 5: quant_entry.set(value[:5])
Limita a quantidade de caracteres que podem ser inseridos no campo de quantidade.
Esse código exemplifica como criar uma interface gráfica em Python para gerenciar produtos e serviços em um sistema comercial. Ele oferece funcionalidades para cadastrar, editar, excluir e visualizar produtos, além de garantir a consistência e a correta formatação dos dados.
Rua Carlos Felipe, 31 - Centro
Suzano - SP