학습 로그/Python3

D+23 [PyCharm PySide6] 실습 및 주석 활용

goodjop79 님의 블로그 2026. 5. 11. 16:48

ㅇ 일 자 : 2026년 5월 8일(금) ~ 10(일)

ㅇ 주요내용 : PyCharm PySide6 환경에서 실습 이해 (개인학습)

 

1. PyChrarm PySide6 설정 이해

# 프로그램 구현 : python 코드 작성, pyside6 연결, C, QT C++호출, UI 동작
# 겉에서는 python, 내부동작은 Qt(c++)
# PySide6가 Python과 Qt를 연결시킨다
# PySide6는 Qt6를 python에서 사용할 수 있게 해주는 Qt공식 파이썬 패키지
# 소프트웨어 개발을 진행하면 파이썬 버젼 매트릭스를 자주 접한다 (Qt for Python 공식 Wiki)
# IDE가 가상환경을 사용토록 설정되어야 한다. (.venv 또는 venv311)
# python 환경 구분 : 시스템, 전역(공통), 가상환경 파이썬
# project/.venv/bin/python   가상환경 경로

python3 -- version       #터미널 창에서 버젼 확인 
sudo apt remove --purge -y python3.11-venv python3.11-dev    #3.11버젼 패키지 삭제
sudo apt autoremove -y   #의존성 정리
sudo apt clean           #캐시 정리
sudo add-apt-repository --remove ppa:deadsnakes/ppa         #ppa 제거
sudo apt update  # 업데이트 
ls /etc/apt/sources.list.d/    #결과 확인


rm -rf /home/<파일명>/.pyenv  # 불필요한 디렉토리 삭제하기, 삭제시 주의, 삭제시 재설치해야 함.
curl https://pyenv.run | bash    #pyenv 설치하기
nano ~/.bashrc      #경로 설정 확인
# pyenv 기본설정이 있다면 아래 두면 됨 (저장 ctrl+o, 종료 ctrl+x)
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

source ~/.bashrc          # 설정 버젼 확인 
pyenv --version           # 설치 결과 확인
pyenv install 3.9.19      # 특정 python버젼 설치
ls -l /usr/bin/python*    #실행파일 디렉토리 직접 조회하기

#터미널 창에서 tab키를 2번 누르면 자동완성 기능, 이전명령어 보려면 상단화살표키
# Ubuntu 기본 Python = 운영체제가 사용하는 전용 작업 공간
# 가상환경 = 내가 프로젝트별로 따로 쓰는 개인 작업 공간
# 시스템 Python과 프로젝트용 Python을 같은 공간에서 섞어 쓰면?? 패키지 충돌, 실행오류, 경로문제
# 외부패키지는 가능하면 가상환경(venv)안에서 설치한다.



#3.10 버젼 설치하기

sudo apt update   # 파일 설치전 업데이트 
sudo apt install software-properties-common   # 프로그램 설치 
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.11 python3.11-venv python3.11-dev  # 3.11버전 파이썬 설치
# 패키지 역할 : 3.11 (실행파일), 3.11-venv (가상환경 생성기능), 3.11-dev(개발헤더)
python3.11 --version    # 설치 결과 확인
which python3.11        # 설치 결과 확인



2. GUI 실행 이해

import sys
from logging import DEBUG, INFO
from os.path import devnull
from platform import python_build
from uu import test

print(sys.argv)  # sys.arva[0] 에는 main.py, test, hello가 들어간다.

python main.py apple banana  # mamin.py에 apple(첫째값), banana(둘째값) 전달한다.

import sys
value = sys.argv[1]
print("전달받은 값:", value)

#외부 모듈 가져오기
form PySide6.QtWidgets import QApplication, QWidget  
# PySide6 Qt겟츠의 모듈안에 있는 Q애플리케이션 클래스,Qwidget 클래스를 현코드에서 가져오기

#.pyd (Windows의 파이썬 확장모듈)
#.so (linux/macOS 확장 모듈)
#.pyi (타입 힌트 파일 파이썬 문법용)
#.py (도움 모듈 정도만 존재)

# Q어플리케이션은 GUI 프로그램 전체를 관리 하는 객체, 눈에 보이는 부분없이 동작가능
# 그러나 QWidget은 사용자가 눈으로 볼수 있는 화면 객체
app = QApplication(sys.argv)

#sys.argv 
#파이사이드 프로그램을 실행하기 위한 기본준비 코드, 외부에서 설정값을 전달하는 방법으로 자주 사용

python maim.py --env dev         # 개발자 pc나 로컬서버에서 실행, 
python main.py --env test        #배포하기 전 검증용 테스트서버에서 실행
pthoon main.py --env production  #실제 사용자가 접속하는 서비스 운영환경에서 실행

 

2.1. PySide6 환경에서의 프로그램 문법 이해

# 명령인자로 로그수준 실행을 바꾼다, 로그 수준사용 의미
python main.py --log-level DEBUG    # 개발중 문제(버그)를 찾기 위한 로그 출력하기

python main.py --log-level INFO     # 일반적인 실행정보를 출력한다.

python main.py --log-level Error    #오류 상황 중심으로 로그 출력한다.

Python log_viewer.py error.log      # 특정 파일을 열면서 프로그램 시작하기

Python log_viewer.py error.log     # 로그 뷰어

python image_viewer.py sample.png  #이미지 뷰어

python csv_viewer.py sales.csv     # CSV뷰어

python config_editor.py config.json  #설정 편집기


#자동화 작업시 GUI 없이 파일 변환이나 데이터 처리만 수행
python main.py   # GUI 창을 띄워 사용자가 직접 조작한다

python main.py --batch input.csv output.xlsx   # GUI 없이 파일 변환 작업만 자동 수행

#다른 프로그램이나 스케줄러가 자동으로 실행하는 경우 값 전달하기
python report_generator.py --date 2026-04-30 --output report.xlsx

#호출하는 주체별 사용 예시
# Windows 작업 스케줄러 - 매얼 정해놓은 시간에 보고서 생성프로그램 실행하기
# Linux cron - 매일 정해놓은 시간에 데이터 변환 프로그램 실행하기
# subprocess.run()  - 다른 파이썬 프로그램을 외부프로그램 실행
# .bat - 배치파일에서 파이썬 프로그램 실행
# CI/CD도구 - 테스트나 배포 과정에서 자동 실행

# QWidget 화면에 보이는 기본창을 만드는 기본UI요소 기본 클래스이다
Window = QWidget()

# 창 제목 설정하기 , 윈도우 창 제목 표시줄에 나타나는 텍스트 설정하기
window.setWindowTitle("Hello PySide6")

window.resize(400, 300)  # 창 크기 설정하기, (가로,세로)

window.show()  # 창 화면 표시하기

app.exec()  #이벤트 루프를 시작하는 코드

sys.exit(app.exec_())  #파이썬 프로그램 종료하는 함수

import sys   # 정상 정료시에 사용

print("프로그램을 정상 종료합니다.")
sys.exit(0)

#오류 종료시에 사용, (1)은 비정상 정료, 오류종료를 의미한다.
import sys

print("오류가 발생하여 프로그램을 종료합니다.")
sys.exti(1)

 

(예 시)

import sys
import argparse
# PySide6에서 UI 구성을 위한 클래스들을 임포트
from PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout

# 1. 커맨드라인 인자(Arguments) 파서 설정
parser = argparse.ArgumentParser()
# --env 옵션 추가 (dev, test, production 중 선택 가능, 기본값은 dev)
parser.add_argument("--env", choices=["dev", "test", "production"], default="dev")

# 2. 인자 분리 처리 (중요!)
# parse_known_args()는 정의된 인자(--env)는 args에 넣고, 
# 정의되지 않은 나머지 인자(PySide6가 사용할 인자 등)는 qt_args로 분리합니다.
args, qt_args = parser.parse_known_args()

# 3. 환경(--env) 설정에 따른 API URL 분기 처리
if args.env == "dev":
    api_url = "http://localhost:8000"          # 개발 환경
elif args.env == "test":
    api_url = "https://test-api.company.com"   # 테스트 환경
else:
    api_url = "https://api.company.com"        # 운영 환경 (production)

# 4. PySide6 GUI 애플리케이션 초기화
# 앞서 분리해둔 qt_args를 전달하여 Qt 관련 인자만 앱에 적용합니다.
app = QApplication(qt_args)

# 5. 메인 윈도우(창) 생성 및 설정
window = QWidget()
window.setWindowTitle(f"실행 환경: {args.env}") # 창 제목 설정

# 6. 레이아웃 및 위젯(텍스트 라벨) 배치
layout = QVBoxLayout() # 세로 정렬 레이아웃 생성
layout.addWidget(QLabel(f"현재 실행 환경: {args.env}"))   # 환경 출력 라벨 추가
layout.addWidget(QLabel(f"사용 API 주소: {api_url}"))    # API 주소 출력 라벨 추가

# 7. 윈도우에 레이아웃 적용 및 크기 설정
window.setLayout(layout)
window.resize(500, 200) # 창 크기 (가로 500, 세로 200)
window.show()           # 화면에 창 표시

# 8. 애플리케이션 이벤트 루프 실행 및 안전한 종료 처리
sys.exit(app.exec())