Ir para conteúdo
Fórum Script Brasil
  • 0

como eu resolvo este problema deste projeto mvc


Guilherme Fierli Castanha

Pergunta

boa tarde estou enfrentando erro neste projeto MVC que fiz ide alega que ouve estouro de pilha só que não estou achando o erro e se tiver algum outro erro no código vocês poderem informar agradeceria  meus códigos  do meu projeto: 

código main:  

import tkinter
from controller import CadastroController, LoginController, RegistroController, VendasController
from model import LoginModel
 
def main():
    login_model = LoginModel()
    login_controller = LoginController(login_model)
 
    cadastro_controller = CadastroController()
    vendas_controller = VendasController()
    registro_controller = RegistroController()
 
    tkinter.mainloop()
 
if __name__ == "__main__":
    main()
 
codigo view :  
import tkinter as tk
from tkinter import messagebox
import tkinter as tk
class TelaLoginView(tk.Tk):
    def __init__(self, controller):
        super().__init__()  # Chamar o construtor da classe pai
        self.controller = controller
        self.title("Tela de Login")
        email_label = tk.Label(self, text="Seu email:")
        email_label.grid(row=0, column=0, padx=5, pady=5)
        senha_label = tk.Label(self, text="Sua senha:")
        senha_label.grid(row=1, column=0, padx=5, pady=5)
        self.email_entry = tk.Entry(self)
        self.email_entry.grid(row=0, column=1, padx=5, pady=5)
        self.senha_entry = tk.Entry(self, show="*")
        self.senha_entry.grid(row=1, column=1, padx=5, pady=5)
        manter_logado_var = tk.IntVar()
        manter_logado_checkbox = tk.Checkbutton(self, text="Manter-me logado", variable=manter_logado_var)
        manter_logado_checkbox.grid(row=2, column=0, columnspan=2, padx=5, pady=5)
        entrar_btn = tk.Button(self, text="Entrar", command=self.realizar_login)
        entrar_btn.grid(row=3, column=0, columnspan=2, padx=5, pady=5)
        cadastrar_link = tk.Button(self, text="Cadastrar", command=self.abrir_cadastro)
        cadastrar_link.grid(row=4, column=0, columnspan=2, padx=5, pady=5)
        self.venda_button = tk.Button(self, text="Vendas", command=self.abrir_vendas)
        self.venda_button.grid(row=20, column=0, columnspan=2, pady=12)
        self.controller = controller
class TelaCadastroView(tk.Toplevel):
    def __init__(self, controller):
        self.controller = controller
        self.title("Cadastro de Automóvel")
        nome_cliente_label = tk.Label(self, text="Nome Cliente:")
        nome_cliente_label.grid(row=0, column=0, padx=5, pady=5)
        modelo_label = tk.Label(self, text="Modelo:")
        modelo_label.grid(row=1, column=0, padx=5, pady=5)
        km_label = tk.Label(self, text="KM:")
        km_label.grid(row=2, column=0, padx=5, pady=5)
        num_chassi_label = tk.Label(self, text="Nº Chassi:")
        num_chassi_label.grid(row=3, column=0, padx=5, pady=5)
        carroceria_label = tk.Label(self, text="Carroceria:")
        carroceria_label.grid(row=4, column=0, padx=5, pady=5)
        marca_label = tk.Label(self, text="Marca:")
        marca_label.grid(row=5, column=0, padx=5, pady=5)
        ano_label = tk.Label(self, text="Ano:")
        ano_label.grid(row=6, column=0, padx=5, pady=5)
        valor_fipe_label = tk.Label(self, text="Valor FIPE:")
        valor_fipe_label.grid(row=7, column=0, padx=5, pady=5)
        cor_label = tk.Label(self, text="Cor:")
        cor_label.grid(row=8, column=0, padx=5, pady=5)
        combustivel_label = tk.Label(self, text="Combustível:")
        combustivel_label.grid(row=9, column=0, padx=5, pady=5)
        cambio_label = tk.Label(self, text="Câmbio:")
        cambio_label.grid(row=10, column=0, padx=5, pady=5)
        self.nome_cliente_entry = tk.Entry(self)
        self.nome_cliente_entry.grid(row=0, column=1, padx=5, pady=5)
        self.modelo_entry = tk.Entry(self)
        self.modelo_entry.grid(row=1, column=1, padx=5, pady=5)
        self.km_entry = tk.Entry(self)
        self.km_entry.grid(row=2, column=1, padx=5, pady=5)
        self.num_chassi_entry = tk.Entry(self)
        self.num_chassi_entry.grid(row=3, column=1, padx=5, pady=5)
        self.carroceria_entry = tk.Entry(self)
        self.carroceria_entry.grid(row=4, column=1, padx=5, pady=5)
        self.marca_entry = tk.Entry(self)
        self.marca_entry.grid(row=5, column=1, padx=5, pady=5)
        self.ano_entry = tk.Entry(self)
        self.ano_entry.grid(row=6, column=1, padx=5, pady=5)
        self.valor_fipe_entry = tk.Entry(self)
        self.valor_fipe_entry.grid(row=7, column=1, padx=5, pady=5)
        self.cor_entry = tk.Entry(self)
        self.cor_entry.grid(row=8, column=1, padx=5, pady=5)
        self.combustivel_entry = tk.Entry(self)
        self.combustivel_entry.grid(row=9, column=1, padx=5, pady=5)
        self.cambio_entry = tk.Entry(self)
        self.cambio_entry.grid(row=10, column=1, padx=5, pady=5)
        self.save_button = tk.Button(self, text="Salvar", command=self.save_car)
        self.save_button.grid(row=22, column=0, columnspan=2, pady=10)
        self.controller = controller
 
class TelaVendasView(tk.Toplevel):
    def __init__(self, controller):
        self.title("Tela de Vendas")
        self.controller = controller
        cliente_label = tk.Label(self, text="Cliente:")
        cliente_label.grid(row=0, column=0, padx=5, pady=5, sticky="e")
        venda_label = tk.Label(self, text="Venda:")
        venda_label.grid(row=1, column=0, padx=5, pady=5, sticky="e")
        documento_label = tk.Label(self, text="Documento:")
        documento_label.grid(row=2, column=0, padx=5, pady=5, sticky="e")
        data_venda_label = tk.Label(self, text="Data da Venda:")
        data_venda_label.grid(row=3, column=0, padx=5, pady=5, sticky="e")
        data_fim_mov_label = tk.Label(self, text="Data Fim Movi:")
        data_fim_mov_label.grid(row=4, column=0, padx=5, pady=5, sticky="e")
        valor_venda_label = tk.Label(self, text="Valor da Venda:")
        valor_venda_label.grid(row=5, column=0, padx=5, pady=5, sticky="e")
        obs_label = tk.Label(self, text="Observações:")
        obs_label.grid(row=6, column=0, padx=5, pady=5, sticky="e")
        self.cliente_entry = tk.Entry(self)
        self.cliente_entry.grid(row=0, column=1, padx=5, pady=5)
        self.venda_entry = tk.Entry(self)
        self.venda_entry.grid(row=1, column=1, padx=5, pady=5)
        self.documento_entry = tk.Entry(self)
        self.documento_entry.grid(row=2, column=1, padx=5, pady=5)
        self.data_venda_entry = tk.Entry(self)
        self.data_venda_entry.grid(row=3, column=1, padx=5, pady=5)
        self.data_fim_mov_entry = tk.Entry(self)
        self.data_fim_mov_entry.grid(row=4, column=1, padx=5, pady=5)
        self.valor_venda_entry = tk.Entry(self)
        self.valor_venda_entry.grid(row=5, column=1, padx=5, pady=5)
        self.obs_entry = tk.Entry(self)
        self.obs_entry.grid(row=6, column=1, padx=5, pady=5)
        self.venda_button = tk.Button(self, text="Finalizar", command=self.controller.save_venda)
        self.venda_button.grid(row=22, column=0, columnspan=2, pady=10)
        self.registro_button = tk.Button(self, text="Abrir Registro", command=self.controller.abrir_cadastro)
        self.registro_button.grid(row=7, column=0, columnspan=2, pady=10)
 
class TelaRegistroView(tk.Toplevel):
    def __init__(self, controller):
        self.title("Tela de Registro")
        self.controller = controller
        periodolabel = tk.Label(self, text="Período:")
        periodolabel.grid(row=0, column=0, padx=5, pady=5, sticky="e")
        tipomovimentacaolabel = tk.Label(self, text="Tipo de Movimentação:")
        tipomovimentacaolabel.grid(row=1, column=0, padx=5, pady=5, sticky="e")
        datainiciallabel = tk.Label(self, text="Data Inicial:")
        datainiciallabel.grid(row=2, column=0, padx=5, pady=5, sticky="e")
        datafinallabel = tk.Label(self, text="Data Final:")
        datafinallabel.grid(row=3, column=0, padx=5, pady=5, sticky="e")
        self.periodoentry = tk.Entry(self)
        self.periodoentry.grid(row=0, column=1, padx=5, pady=5)
        self.tipomovimentacao_entry = tk.Entry(self)
        self.tipomovimentacao_entry.grid(row=1, column=1, padx=5, pady=5)
        self.datainicial_entry = tk.Entry(self)
        self.datainicial_entry.grid(row=2, column=1, padx=5, pady=5)
        self.datafinal_entry = tk.Entry(self)
        self.datafinal_entry.grid(row=3, column=1, padx=5, pady=5)
        self.consultar_button = tk.Button(self, text="Consultar", command=lambda: self.controller.consultar_registros(self.periodoentry.get(), self.tipomovimentacao_entry.get()))
        self.consultar_button.grid(row=22, column=0, columnspan=2, pady=10)
        self.gerar_relatorio_button = tk.Button(self, text="Gerar Relatório", command=lambda: self.controller.gerar_relatorio(self.periodoentry.get(), self.tipomovimentacao_entry.get()))
        self.gerar_relatorio_button.grid(row=7, column=0, columnspan=2, pady=10)
        imprimirbutton = tk.Button(self, text="Imprimir", command=self.controller.imprimir_relatorio)
        imprimirbutton.grid(row=4, column=2, padx=5, pady=5
          codigo controller:  
from tkinter import messagebox
from view import TelaLoginView, TelaCadastroView, TelaVendasView, TelaRegistroView
from model import LoginModel, CadastroModel, VendasModel, RegistroModel
 
class LoginController:
    def __init__(self, model):
        self.model = model
        self.view = TelaLoginView(self)
 
class CadastroController:
    def __init__(self, model):
        self.model = model
        self.view = TelaCadastroView(self)
 
class VendasController:
    def __init__(self, model):
        self.model = model
        self.view = TelaVendasView(self)
 
class RegistroController:
    def __init__(self, model):
        self.model = model
        self.view = TelaRegistroView(self)
 
    def consultar_registros(self, periodo, tipo_movimentacao, data_inicial, data_final):
        registros = self.model.consultar_registros(periodo, tipo_movimentacao, data_inicial, data_final)
        self.view.mostrar_registros(registros)
 
    def gerar_relatorio(self, periodo, tipo_movimentacao, data_inicial, data_final):
        relatorio = self.model.gerar_relatorio(periodo, tipo_movimentacao, data_inicial, data_final)
        self.view.mostrar_relatorio(relatorio)
 
    def imprimir_relatorio(self, relatorio):
        self.model.imprimir_relatorio(relatorio)
        messagebox.showinfo("Impressão", "O relatório foi enviado para a impressora.")
 
           codigo Model:  
from datetime import datetime
from tkinter import messagebox
 
class LoginModel:
    def validate_login(self, username, password):
       
        if username != "" and password != "":
            return True
        else:
            return False
 
class CadastroModel:
    def save_car(self, car_data):
         car_data = {
            "nome_cliente": self.nome_cliente_entry.get(),
            "modelo": self.modelo_entry.get(),
            "km": self.km_entry.get(),
            "num_chassi": self.num_chassi_entry.get(),
            "carroceria": self.carroceria_entry.get(),
            "marca": self.marca_entry.get(),
            "ano": self.ano_entry.get(),
            "valor_fipe": self.valor_fipe_entry.get(),
            "cor": self.cor_entry.get(),
            "combustivel": self.combustivel_entry.get(),
            "cambio": self.cambio_entry.get(),
        }
 
         self.controller.save_car(car_data)
         messagebox.showinfo("Cadastro de Automóvel", "Automóvel cadastrado com sucesso!")
   
class VendasModel:
    def save_venda(self, venda_data):
        venda_data = {
            "cliente": self.view.cliente_entry.get(),
            "venda": self.view.venda_entry.get(),
            "documento": self.view.documento_entry.get(),
            "data_venda": self.view.data_venda_entry.get(),
            "data_fim_mov": self.view.data_fim_mov_entry.get(),
            "valor_venda": self.view.valor_venda_entry.get(),
            "obs": self.view.obs_entry.get()
        }
        self.model.save_venda(venda_data)
        messagebox.showinfo("Vendas", "Venda salva com sucesso!")
 
class RegistroModel:
 
    def consultar_registros(self, periodo, tipo_movimentacao, data_inicial, data_final):
        registros = [
            {"id": 1, "data": datetime.now(), "descricao": "Registro 1"},
            {"id": 2, "data": datetime.now(), "descricao": "Registro 2"},
            {"id": 3, "data": datetime.now(), "descricao": "Registro 3"},
        ]
        return registros
 
    def gerar_relatorio(self, periodo, tipo_movimentacao, data_inicial, data_final):
         periodo = self.view.periodoentry.get()
         tipo_movimentacao = self.view.tipomovimentacao_entry.get()
         data_inicial = self.view.datainicial_entry.get()
         data_final = self.view.datafinal_entry.get()
         relatorio = self.model.gerar_relatorio(periodo, tipo_movimentacao, data_inicial, data_final)
         self.view.mostrar_relatorio(relatorio)
 
    def imprimir_relatorio(self, relatorio):
        periodo = self.view.periodoentry.get()
        tipo_movimentacao = self.view.tipomovimentacao_entry.get()
        data_inicial = self.view.datainicial_entry.get()
        data_final = self.view.datafinal_entry.get()
        relatorio = self.model.gerar_relatorio(periodo, tipo_movimentacao, data_inicial, data_final)
        self.model.imprimir_relatorio(relatorio)
        messagebox.showinfo("Impressão", "O relatório foi enviado para a impressora.")
 
 


 
 
   
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...