Para carregar uma interface definida em um arquivo .ui e conectar sinais de widgets, podemos usar a função loadUi. Por exemplo, ao vincular um botão de seleção a um método que abre um diálogo de arquivos, a estrutura básica é:
loadUi('interface_principal.ui', self)
self.botaoEscolher.clicked.connect(self.obterNomePasta)
self.botaoIniciar.clicked.connect(self.iniciarRenomearArquivos)
Aqui, botaoEscolher e botaoIniciar são os nomes dos widgets definidos no arquivo .ui.
O código abaixo define a interface gráfica, gerada a partir de um arquivo .ui, com widgets como botões e campos de texto. As variáveis e métodos foram renomeados para clareza e manutenção da lógica original.
# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
class InterfaceGrafica(object):
def configurarInterface(self, janelaPrincipal):
janelaPrincipal.setObjectName("JanelaPrincipal")
janelaPrincipal.resize(800, 600)
self.widgetCentral = QtWidgets.QWidget(janelaPrincipal)
self.widgetCentral.setObjectName("widgetCentral")
self.layoutGrade = QtWidgets.QGridLayout(self.widgetCentral)
self.layoutGrade.setObjectName("layoutGrade")
self.botaoEscolherArquivo = QtWidgets.QPushButton(self.widgetCentral)
fonte = QtGui.QFont()
fonte.setPointSize(15)
self.botaoEscolherArquivo.setFont(fonte)
self.botaoEscolherArquivo.setObjectName("botaoEscolherArquivo")
self.layoutGrade.addWidget(self.botaoEscolherArquivo, 1, 3, 1, 1)
self.rotuloResultado = QtWidgets.QLabel(self.widgetCentral)
fonte = QtGui.QFont()
fonte.setPointSize(15)
self.rotuloResultado.setFont(fonte)
self.rotuloResultado.setObjectName("rotuloResultado")
self.layoutGrade.addWidget(self.rotuloResultado, 3, 0, 1, 1)
self.campoCaminhoArquivo = QtWidgets.QLineEdit(self.widgetCentral)
fonte = QtGui.QFont()
fonte.setPointSize(15)
self.campoCaminhoArquivo.setFont(fonte)
self.campoCaminhoArquivo.setObjectName("campoCaminhoArquivo")
self.layoutGrade.addWidget(self.campoCaminhoArquivo, 1, 1, 1, 1)
self.rotuloCaminho = QtWidgets.QLabel(self.widgetCentral)
fonte = QtGui.QFont()
fonte.setPointSize(15)
self.rotuloCaminho.setFont(fonte)
self.rotuloCaminho.setObjectName("rotuloCaminho")
self.layoutGrade.addWidget(self.rotuloCaminho, 1, 0, 1, 1)
self.rotuloTitulo = QtWidgets.QLabel(self.widgetCentral)
fonte = QtGui.QFont()
fonte.setPointSize(20)
self.rotuloTitulo.setFont(fonte)
self.rotuloTitulo.setAlignment(QtCore.Qt.AlignCenter)
self.rotuloTitulo.setObjectName("rotuloTitulo")
self.layoutGrade.addWidget(self.rotuloTitulo, 0, 1, 1, 1)
self.botaoIniciar = QtWidgets.QPushButton(self.widgetCentral)
fonte = QtGui.QFont()
fonte.setPointSize(15)
self.botaoIniciar.setFont(fonte)
self.botaoIniciar.setObjectName("botaoIniciar")
self.layoutGrade.addWidget(self.botaoIniciar, 2, 3, 1, 1)
self.areaStatus = QtWidgets.QTextEdit(self.widgetCentral)
fonte = QtGui.QFont()
fonte.setPointSize(15)
self.areaStatus.setFont(fonte)
self.areaStatus.setObjectName("areaStatus")
self.layoutGrade.addWidget(self.areaStatus, 3, 1, 1, 1)
janelaPrincipal.setCentralWidget(self.widgetCentral)
self.barraStatus = QtWidgets.QStatusBar(janelaPrincipal)
self.barraStatus.setObjectName("barraStatus")
janelaPrincipal.setStatusBar(self.barraStatus)
self.retraduzirInterface(janelaPrincipal)
QtCore.QMetaObject.connectSlotsByName(janelaPrincipal)
def retraduzirInterface(self, janelaPrincipal):
_traduzir = QtCore.QCoreApplication.translate
janelaPrincipal.setWindowTitle(_traduzir("JanelaPrincipal", "Monitoramento de Upload de Vídeos"))
self.botaoEscolherArquivo.setText(_traduzir("JanelaPrincipal", "Selecionar"))
self.rotuloResultado.setText(_traduzir("JanelaPrincipal", "Resultado da execução:"))
self.rotuloCaminho.setText(_traduzir("JanelaPrincipal", "Caminho do arquivo:"))
self.rotuloTitulo.setText(_traduzir("JanelaPrincipal", "Monitor de Upload de Vídeos"))
self.botaoIniciar.setText(_traduzir("JanelaPrincipal", "Iniciar"))
No script principal, a classe principal gerencia a lógica da aplicação, incluindo a abertura do diálogo de arquivos. Os nomes das classes e métodos foram alterados para refletir uma estrutura mais descritiva, mantendo a funcionalidade de selecionar arquivos Excel e atualizar o campo de texto.
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import interface_grafica as ui_modulo
class AplicacaoPrincipal(QMainWindow):
def inicializar(self):
self.ui.botaoEscolherArquivo.clicked.connect(self.selecionar_arquivo_excel)
def selecionar_arquivo_excel(self):
nome_arquivo, tipo_arquivo = QFileDialog.getOpenFileName(
self, "Abrir Arquivo Excel", "c:\\", "Arquivos Excel (*.xlsx)"
)
if nome_arquivo:
self.ui.campoCaminhoArquivo.setText(nome_arquivo)
if __name__ == '__main__':
app = QApplication(sys.argv)
janela = QMainWindow()
ui_instancia = ui_modulo.InterfaceGrafica()
ui_instancia.configurarInterface(janela)
janela.show()
aplicacao = AplicacaoPrincipal(janela)
aplicacao.ui = ui_instancia
aplicacao.inicializar()
sys.exit(app.exec_())