Explicação do Código - Sistema Comercial

Explicação do Código - Sistema Comercial - Cadastro de Produtos

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.

1. Codificação e Importações

 # -*- 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.
  • Imports: Os módulos 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.

2. Configuração Regional

 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.

3. Criação da Janela Principal

 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.

4. Imagem de Fundo

 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.

5. Funções de Manipulação de Dados

Limpar Campos

 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.

Buscar Produto

 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.

Duplo Clique

 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.

Visualizar Produtos

 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.

Gravar Produto

 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.

Excluir Produto

 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.

Menu Principal

 def menu():
    tela_prod.destroy() 

Fecha a janela atual e retorna ao menu principal.

Limitar Tamanho de Entrada

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.

Conclusão

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.

Venha nos ver pessoalmente

Rua Carlos Felipe, 31 - Centro

Suzano - SP

Contate-nos

copiadorabgmax@gmail.com
(11) 99210-2047
Share by: