IT/Python

PyQt 파일첨부, 파일 열기, FileDialog 기능 구현하기

Dev. Sean 2024. 1. 28. 19:18
반응형

사용자가 자신의 파일 시스템에서 파일을 선택할 수 있도록 하는 '파일 열기' 다이얼로그는 PyQt 애플리케이션의 중요한 구성 요소 중 하나입니다.

이번 포스트에서는 PyQt 기반 애플리케이션에서 사용자가 Excel 파일을 선택하고, pandas 라이브러리를 이용해 해당 파일을 읽어오는 기능을 구현하는 방법을 소개합니다.

 

 

파일 다이얼로그를 통한 Excel 파일 열기

파일 다이얼로그는 사용자가 애플리케이션을 통해 파일 시스템을 탐색하고 파일을 선택할 수 있게 해주는 표준 UI 요소입니다. PyQt에서는 QFileDialog 클래스를 사용하여 이를 구현할 수 있습니다.

관련 코드:

from PySide6.QtWidgets import QMainWindow, QFileDialog, QMessageBox
import pandas as pd

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        # UI 설정 및 초기화 코드
        # ...
        
        # "파일 열기" 버튼 클릭 시 openFileDialog 함수 호출
        self.ui.addFileToolButton.clicked.connect(self.openFileDialog)
        
    def openFileDialog(self):
        file_name, _ = QFileDialog.getOpenFileName(self, "파일 열기", "", "Excel Files (*.xlsx *.xls)")
        if file_name:
            try:
                # pandas로 엑셀 파일을 읽어봅니다. (engine='openpyxl'을 명시적으로 지정)
                excelData = pd.read_excel(file_name, engine='openpyxl')
                # 파일 위치를 UI에 표시
                self.ui.fileLocationInfoTextBrowser.setText(file_name)
            except Exception as e:
                QMessageBox.critical(self, "오류", "Excel 파일을 읽는 동안 오류가 발생했습니다. 오류: " + str(e))

 

이 코드는 사용자가 '파일 열기' 버튼을 클릭하면 실행되는 openFileDialog 함수를 정의합니다.

 

QFileDialog.getOpenFileName 메서드는 사용자가 파일 다이얼로그를 통해 선택한 파일의 경로를 반환합니다.

 

이 경로를 pandas의 read_excel 함수에 전달하여 Excel 파일을 읽습니다.

 

성공적으로 파일을 읽으면 파일 경로를 UI에 표시하고, 오류가 발생하면 사용자에게 오류 메시지를 표시하는 QMessageBox를 사용합니다.

 

 

파일 다이얼로그를 사용하여 사용자가 엑셀 파일뿐만 아니라 다른 모든 종류의 파일을 첨부할 수 있도록 하려면, 파일 선택 다이얼로그의 필터 옵션을 조정해야 합니다.

 

기본적으로 QFileDialog.getOpenFileName 메서드는 파일 타입 필터를 사용하여 사용자가 선택할 수 있는 파일의 종류를 제한합니다.

 

엑셀 파일만 선택할 수 있게 설정된 현재 필터를 모든 파일을 선택할 수 있게 변경하여 사용자에게 더 많은 유연성을 제공할 수 있습니다.

모든 파일 타입 선택 가능하게 설정하기

파일 다이얼로그의 파일 타입 필터를 "All Files (*)"로 설정하면 사용자가 모든 종류의 파일을 선택할 수 있게 됩니다.

이는 사용자가 특정 파일 형식에 제한되지 않고 원하는 모든 파일을 애플리케이션에 첨부할 수 있게 해줍니다.

수정된 openFileDialog 함수:

from PySide6.QtWidgets import QMainWindow, QFileDialog, QMessageBox

class MainWindow(QMainWindow):
    def openFileDialog(self):
        file_name, _ = QFileDialog.getOpenFileName(self, "파일 열기", "", "All Files (*)")
        if file_name:
            # 선택된 파일을 처리하는 코드
            # 파일 위치를 UI에 표시
            self.ui.fileLocationInfoTextBrowser.setText(file_name)
반응형

'IT > Python' 카테고리의 다른 글

Python 특정 프로그램 선택, focus, 맨 앞으로 가져오기  (0) 2024.01.28
파이썬 복사 붙여넣기  (0) 2024.01.28