Implementação de Navegação entre Janela de Login e Janela Principal em PyQt5

Este artigo detalha uma abordagem eficaz para gerenciar a transição de uma janela de autenticação para a intreface principal em uma aplicação PyQt5. A solução utiliza herança de classes e manipulação de eventos para garantir uma experiência de usuário fluida. O código a seguir demonstra a estrutura refatorada com nomes de variáveis e lógica alterados para maior clareza e manutenibilidade.

O arquivo de login, denominado LoginInterface.py, contém a classe da janela de login. Ele verifica as cerdenciais do usuário e, em caso de sucesso, instancia e exibe a janela principal.

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtCore import QTimer
from ui_login import Ui_LoginWindow  # Gerado a partir de um arquivo .ui
from janela_principal import JanelaPrincipal
from db_manager import GerenciadorBancoDados

class TelaAutenticacao(QMainWindow, Ui_LoginWindow):
    def __init__(self):
        super(TelaAutenticacao, self).__init__()
        self.setupUi(self)
        self.botao_acessar.clicked.connect(self.processar_login)

    def processar_login(self):
        usuario = self.campo_usuario.text()
        senha = self.campo_senha.text()
        if not usuario or not senha:
            QMessageBox.warning(self, "Erro", "Usuário e senha são obrigatórios.")
            return
        
        db = GerenciadorBancoDados()
        autenticacao = db.verificar_credenciais(usuario, senha)
        if autenticacao:
            self.tela_principal = JanelaPrincipal()
            self.tela_principal.show()
            self.close()
        else:
            QMessageBox.warning(self, "Erro", "Autenticação falhou. Verifique os dados.")

if __name__ == '__main__':
    aplicativo = QApplication(sys.argv)
    tela_login = TelaAutenticacao()
    tela_login.show()
    sys.exit(aplicativo.exec_())

O arquivo da janela principal, janela_principal.py, implementa a interface secundária com funcionalidades adicionais, como carregar e exibir vídeos processados.

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtCore import QTimer
import cv2
from ui_principal import Ui_MainWindow  # Gerado a partir de um arquivo .ui
from modulos.processador import ProcessadorMidia

class JanelaPrincipal(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(JanelaPrincipal, self).__init__()
        self.setupUi(self)
        self.botao_midia.clicked.connect(self.abrir_arquivo_video)
        self.temporizador = QTimer(self)
        self.captura = None

    def abrir_arquivo_video(self):
        caminho, _ = QFileDialog.getOpenFileName(self, "Escolha um vídeo", "./")
        if caminho:
            self.captura = cv2.VideoCapture(caminho)
            self.temporizador.timeout.connect(self.atualizar_visualizacao)
            self.temporizador.start(25)  # Intervalo em milissegundos

    def atualizar_visualizacao(self):
        if self.captura and self.captura.isOpened():
            sucesso, quadro = self.captura.read()
            if sucesso:
                processador = ProcessadorMidia()
                quadro_tratado = processador.aplicar_filtro(quadro)
                h, w, c = quadro_tratado.shape
                q_img = QImage(quadro_tratado.data, w, h, c * w, QImage.Format_RGB888)
                self.area_visualizacao.setPixmap(QPixmap.fromImage(q_img))
                self.area_visualizacao.setScaledContents(True)
            else:
                self.temporizador.stop()
                self.captura.release()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    janela = JanelaPrincipal()
    janela.show()
    sys.exit(app.exec_())

A integração entre as janelas é feita através da instanciação direta da classe JanelaPrincipal dentro da lógica de autenticação. Isso elimina a necessidade de variáveis globais e simplifica o fluxo de controle. Assegure-se de que os módulos de interface gerados (ui_login.py e ui_principal.py) estejam corretamente importados e que as dependências como OpenCV e bibliotecas de banco de dados sejam instaladas.

Tags: pyqt5 Python Interface Gráfica autenticacao processamento de vídeo

Publicado em 6-30 22:52