1. 파이썬에서 Qt Resource 에 리소스 추가하기
2. 파이썬 코드에서 Resource 파일에서 데이터 사용하기
에 대해 알아보도록 하겠습니다.
1. 파이썬에서 Qt Resource 에 리소스 추가하기
1) 리소스 파일 생성
resource.qrc라는 파일명으로 아래와 같이 리소스 파일을 만들어 줍니다.
- <file></file> 태그 안에 추가할 리소스 경로를 넣어 추가해 줍니다.
- file 태그 안의 경로는 resource.qrc 파일이 있는 위치부터의 경로를 넣고, 해당 경로에 실제 파일이 존재해야 합니다.
<RCC>
<qresource prefix="/">
<file>img/icon.jpg</file>
<file>data/text.txt</file>
</qresource>
</RCC>
2) 리소스 파일 변환
터미널에서 아래 명령을 실행하여 resource.qrc 파일을 .py 파일로 변환합니다. (pyrcc5.exe가 설치되어 있어야 함)
pyrcc5 resource.qrc -o resource_qrc.py
3) 리소스 파일 import
리소스를 사용하고자 하는 python 파일에서 아래와 같이 리소스를 import 합니다.
from . import resource_qrc
여기까지 하면 파이썬 코드에서 리소스를 사용하기 위한 준비가 끝났습니다.
아래에서는 리소스에서 파일을 읽어 사용하는 법을 알아보도록 하겠습니다.
2. 파이썬 코드에서 Resource 의 데이터 사용하기
읽을 파일의 경로명 앞에 ":" 을 추가하고 prefix를 포함한 경로명을 적어주면 됩니다.
1) 그림 파일의 경우
위의 예에서 본 리소스 파일에서, img/icon.jpg 을 읽어오는 방법입니다.
pixmap = QPixmap(":/img/icon.jpg")
아이콘으로 읽고 싶다면 아래와 같이 합니다.
icon = QIcon(":/img/icon.jpg")
2) 텍스트 파일의 경우
- 일반적으로 python에서는 with open 또는 open 함수를 이용해 파일을 열지만, 리소스 파일 안에 있는 텍스트나 바이너리 파일을 읽는 경우 QFile 클래스를 사용해야 합니다.
- 파이썬에서 open 후 readlines() 하면 자동으로 라인별로 split된 결과가 리턴되지만, QTextStream.readAll()을 하면 통으로 된 데이터가 리턴됩니다. 따라서, 아래와 같이 '\n'으로 split한 결과를 리턴하는 함수를 만들면 readlines와 유사한 결과를 얻을 수 있습니다.
lines = readTextFileFromResource(":/data/text.txt")
def readDataFromResource(path, codec = 'UTF-8'):
fd = QFile(path)
data = None
if fd.open(QIODevice.ReadOnly | QFile.Text):
ts = QTextStream(fd)
ts.setCodec(codec)
data = ts.readAll()
fd.close()
return data.split('\n')
'개발 > Qt' 카테고리의 다른 글
[Qt] QTextBrowser, QTextEdit 에 스타일(CSS) 적용하기, 하이퍼링크 열기 (0) | 2021.11.28 |
---|---|
[Qt] 메시지 박스(QMessageBox) 몇 초 후 자동으로 사라지게 하기 (0) | 2021.11.16 |
[PyQt] StyleSheet 사용해서 QComboBox 색상 변경 (0) | 2021.11.06 |
[PyQt] 트리 뷰(QTreeView)에 콤보박스(QComboBox) 추가하기 (0) | 2021.11.03 |
[PyQt] QTreeView에서 각 아이템마다 다른 툴팁 설정하기 (0) | 2021.11.01 |