※ 업무하면서 습득한 내용들을 정리해 놓은 포스팅입니다 :P 추가로 궁금하신 점은 댓글로 남겨주시고 필요한 자료 있으면 요청주세요! 잘못된 내용이 있으면 고쳐주시면 감사하겠습니다. 자료 퍼가실 때는 출처 남겨주세요!
ο 목차
※ 코드 보는 방법 참고
ㅇ 달러 기호($)가 있는 경우 -> 리눅스 터미널에서 CLI 명령어 입력
ㅇ "=#" 기호가 있는 경우 -> psql 쉘에서 명령어 입력
ㅇ 꺽쇠가 하나 있는 경우(>) -> 윈도우 명령 프롬프트(cmd)에서 명령어 입력
ㅇ 꺽쇠가 세개 있는 경우(>>>) -> python 쉘에서 명령어 입력
안녕하세요, 네모입니다 :D
파일 내용 탐색 후 선택한 파일명을 지정된 라인 에디터에 입력하는 코드를 작성해보려 합니다~
궁금하신점 있으면 언제든 댓글 주세요
1. 주요 코드 개요
1) 파일 탐색(QFileDialog)
- 푸시 버튼 생성
- 푸시 버튼 누르면 파일 탐색창 열기(현재 Python 파일이 있는 디렉토리 경로)
- 파일 선택시 파일명을 라인 에디트로 리턴
2) 라인 에디트(QLineEdit) 코드
- 사용자 임의 수정 불가능하게 설정
- 파일 탐색창으로부터 전달받은 파일명을 지정된 라인 에디트에 출력
2. 전체 코드
# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtWidgets
import sys
class Python_Install(QtWidgets.QWidget) :
def __init__(self):
super().__init__()
self.setWindowTitle('main_window')
self.resize(800, 600)
self.initUI()
def initUI(self):
# Subject Label
self.lb_sbj = QtWidgets.QLabel(self)
self.lb_sbj.setText('파일 탐색 테스트 윈도우')
self.lb_sbj.setGeometry(QtCore.QRect(50, 70, 631, 18))
font1 = self.lb_sbj.font()
font1.setPointSize(10)
font1.setFamily('Times New Roman')
font1.setBold(True)
self.lb_sbj.setFont(font1)
self.lb_sbj.adjustSize()
# add GroupBox
self.gb = QtWidgets.QGroupBox(self)
self.gb.setGeometry(QtCore.QRect(40, 120, 731, 331))
self.gb.setTitle('파일 업로드')
# 주요 코드
self.LB_host = QtWidgets.QLabel(self.gb)
self.LB_host.setGeometry(QtCore.QRect(50, 70, 121, 18))
self.LB_host.setText('파일명 :')
self.LE1 = QtWidgets.QLineEdit(self.gb)
self.LE1.setGeometry(QtCore.QRect(200, 60, 301, 25))
self.LE1.setReadOnly(True)
self.FC1 = QtWidgets.QPushButton(self.gb)
self.FC1.setGeometry(QtCore.QRect(510, 60, 112, 34))
self.FC1.setText('파일 선택')
# 푸시 버튼 클릭시 파일 탐색기 슬롯과 연결
self.FC1.clicked.connect(lambda: self.File_Choose(self.LE1))
# 파일 탐색기 슬롯
def File_Choose(self, X):
file, check = QtWidgets.QFileDialog.getOpenFileName(self, '호스트 파일 선택창', "", "All Files (*);;Text Files (*.txt)")
if check:
X.setText(file)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
mw = Python_Install()
mw.show()
sys.exit(app.exec_())
3. 코드 상세 분석
1) 파일탐색(QFileDialog) 슬롯(slot)
- "파일탐색 및 라인 에디트에 파일명 쓰기" 슬롯 코드
def File_Choose(self, X):
file, check = QtWidgets.QFileDialog.getOpenFileName(self, '호스트 파일 선택창', '', 'All Files (*);;Text Files (*.txt)')
if check:
X.setText(file)
- "X" 인자는 파일명을 입력할 라인 에디트 인스턴스 값을 전달하여 사용
2) getOpenFileName 메소드 분석
- QFileDialog 위젯 클래스의 메소드
- 첫번째 인자(self) : 부모 위젯으로 값이 설정되는 경우 설정된 부모 위젯의 중앙에서 파일 탐색 창이 열림. 일반적으로 "None"으로 하거나 "self" 사용
- 두번째 인자('호스트 파일 선택창') : 파일 탐색 윈도우 왼쪽 상단에 표시되는 이름.
- 세번째 인자('') : 파일 탐색기 시작 디렉토리 설정. 빈 값을 설정하는 경우 현재 디렉토리에서 파일 탐색기가 열림.
- 네번째 인자('All Files (*);;Text Files (*.txt)') : 하단 오른쪽의 파일 필터값을 설정하는 인자.
- getOpenFileName 메소드의 각 인자별 설정 내용 참고 ↓
3) 슬롯에 self 외의 추가 인자 전달
- 해당 코드 내용 참고 ↓
self.FC1.clicked.connect(lambda: self.File_Choose(self.LE1))
- 위의 코드와 같이 File_Choose라는 슬롯에 추가 인자를 전달하는 경우 'lambda:' 함수 반드시 추가해서 사용해야 함
※ Qt의 신호-슬롯 전달 매커니즘에서는 추가 인수를 직접 전달하는 방법을 지정하고 있지 않기 때문에 lambda 함수를 활용해서 추가 인수를 전달해주어야 함
4) 라인 에디트 - 사용자 임의 수정 제한하기
- 해당 코드 내용 참고 ↓
self.LE1.setReadOnly(True)
- setReadOnly 메소드 값을 True 로 설정하여 사용자의 "쓰기" 권한을 제한
4. 코드 실행 결과
- 메인 윈도우
- 파일 탐색기 실행
- 결과 확인
※ 좋아요와 구독은 큰 힘이 됩니다. 감사합니다.
'파이썬 개발 > Qypt5' 카테고리의 다른 글
PyQt5 - GUI, Window 종료시 오류 내용 표시, 오류 정보 없는 프로그램 종료(Crash) 방지 (0) | 2022.09.14 |
---|---|
Pyqt5 - gui 멈춤, gui freezing 해소, QThread 사용, multithreading, Long-running task offloading (0) | 2022.09.08 |
PyQt5 - QLabel(레이블) 글자 잘림 현상 해결 (0) | 2022.08.08 |
PyQt5 - 어플리케이션, 위젯, 윈도우, 이벤트 루프에 대해서 (0) | 2022.08.03 |
PyQt5 - 메인 윈도우에서 다른 윈도우 열기 (0) | 2022.08.03 |
댓글