Utilizando o FileDialog do PyQt5 para Seleção de Arquivos

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_())

Tags: pyqt5 QtDesigner FileDialog UIFile Python

Publicado em 7-12 07:43