4. app = QApplication(sys.argv)

더보기

4.1. QApplication 이란?

app = QApplication(sys.argv)

QApplication은 GUI 프로그램 전체를 관리하는 객체입니다.

화면을 구성하는 부분이 아닙니다. 프로그램은 눈에 보이는 부분 없이 동작 가능합니다.

 

반면, QWidget은 실제로 사용자가 눈으로 볼 수 있는 화면(객체)입니다.

 

 

 

 

4.2. PySide6 에서 왜 sys.argv를 넣는가?

 

지금 단계에서는 QApplication(sys.argv)를 “PySide6 프로그램을 실행하기 위한 기본 준비 코드”라고 이해하면 됩니다.

 

 

 

 

4.3. 실제 사용할 만한 예시

실제 개발 현장에서 sys.argv 또는 명령 인자는 단순한 예제용 문법이 아니라,

프로그램 실행 시 외부에서 설정값을 전달하는 방법으로 자주 사용됩니다.

 

4.3.1. 개발 환경, 테스트 환경, 운영 환경을 구분하는 경우

현장에서는 같은 프로그램이라도 개발 환경, 테스트 환경, 운영 환경에서 다르게 실행해야 하는 경우가 많습니다.

예를 들어 API 서버 주소, 데이터베이스 주소, 로그 출력 방식이 환경마다 달라질 수 있습니다.

python main.py --env dev
python main.py --env test
python main.py --env production
실행 명령실행 환경사용 예시
python main.py --env dev 개발 환경 개발자 PC 또는 로컬 서버에서 실행
python main.py --env test 테스트 환경 배포 전 기능 검증용 서버에서 실행
python main.py --env production 운영 환경 실제 사용자가 접속하는 서비스 환경에서 실행
import sys
import argparse
from PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout

parser = argparse.ArgumentParser()
parser.add_argument("--env", choices=["dev", "test", "production"], default="dev")

args, qt_args = parser.parse_known_args()

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"

app = QApplication(qt_args)

window = QWidget()
window.setWindowTitle(f"실행 환경: {args.env}")

layout = QVBoxLayout()
layout.addWidget(QLabel(f"현재 실행 환경: {args.env}"))
layout.addWidget(QLabel(f"사용 API 주소: {api_url}"))

window.setLayout(layout)
window.resize(500, 200)
window.show()

sys.exit(app.exec())

 

4.3.2. 로그 수준을 실행할 때 바꾸는 경우

개발 중에는 자세한 로그가 필요하지만, 운영 환경에서는 너무 많은 로그가 오히려 문제가 될 수 있습니다.

이럴 때 명령 인자로 로그 수준을 전달할 수 있습니다.

python main.py --log-level DEBUG
python main.py --log-level INFO
python main.py --log-level ERROR
로그 수준사용 의미
DEBUG 개발 중 문제를 찾기 위해 자세한 로그를 출력합니다.
INFO 일반적인 실행 정보를 출력합니다.
ERROR 오류 상황 중심으로 로그를 출력합니다.

 

4.3.3. 특정 파일을 열면서 프로그램을 시작하는 경우

문서 편집기, 로그 뷰어, 이미지 뷰어, CSV 뷰어 같은 프로그램은 실행할 때 파일 경로를 함께 전달받아 프로그램 시작과 동시에 해당 파일을 열 수 있습니다.

python log_viewer.py error.log
프로그램 종류명령 인자 예시
로그 뷰어 python log_viewer.py error.log
이미지 뷰어 python image_viewer.py sample.png
CSV 뷰어 python csv_viewer.py sales.csv
설정 편집기 python config_editor.py config.json

 

4.3.4. GUI 프로그램이지만 자동 처리 모드도 지원하는 경우

실무에서는 하나의 프로그램이 두 가지 방식으로 동작하기도 합니다.

평소에는 GUI 창을 띄우지만, 자동화 작업에서는 GUI 없이 파일 변환이나 데이터 처리만 수행할 수 있습니다.

실행 방식의미
python main.py GUI 창을 띄워 사용자가 직접 조작합니다.
python main.py --batch input.csv output.xlsx GUI 없이 파일 변환 작업만 자동으로 수행합니다.

 

4.3.5. 다른 프로그램이나 스케줄러가 내 프로그램을 호출하는 경우

현장에서는 사람이 직접 프로그램을 실행하지 않고, 다른 프로그램이나 스케줄러가 자동으로 실행하는 경우도 많습니다.

이때도 명령 인자를 사용해 날짜, 입력 파일, 출력 파일 같은 값을 전달할 수 있습니다.

python report_generator.py --date 2026-04-29 --output report.xlsx
호출하는 주체사용 예시
Windows 작업 스케줄러 매일 오전 9시에 보고서 생성 프로그램 실행
Linux cron 매일 새벽 자동으로 데이터 변환 프로그램 실행
다른 Python 프로그램 subprocess.run()으로 외부 프로그램 실행
배치 파일 .bat 파일에서 파이썬 프로그램 실행
CI/CD 도구 테스트나 배포 과정에서 자동 실행

정리

초급 단계에서는 QApplication(sys.argv)를 “PySide6 GUI 프로그램을 실행하기 위한 기본 준비 코드”로 이해하면 됩니다. 하지만 실무에서는 sys.argv를 프로그램 실행 시 외부에서 들어온 실행 정보로 보고, 환경 설정, 로그 수준, 파일 경로, 자동화 옵션 등을 제어하는 데 활용합니다.

5. window = QWidget()

더보기

5.1 QWidget이란?

window = QWidget()

PySide6에서 QWidget은 화면에 보이는 기본 창을 만들기 위한 UI 요소의 가장 기본이 되는 클래스입니다.

여기서 window는 QWidget으로 화면에 표시할 단순한 빈 창 하나를 생성하는 코드입니다.

 

아주 단순한 빈 창도 QWidget 으로 만들 수 있고, 다양한 위젯들도 이 구조를 바탕으로 동작합니다.

즉, QWidget은 “눈에 보이는 창(화면)의 기본 뼈대”라고 이해하면 됩니다.

 

 

 

 

5.2 창 제목 설정하기

window.setWindowTitle("Hello PySide6")

이 코드는 윈도우, 즉 창의 제목 표시줄에 나타나는 텍스트를 설정합니다.

 

 

 

 

5.3 창 크기 설정하기

window.resize(400, 300)

이 코드는 창의 크기를 설정합니다.

여기서 400은 가로 크기, 300은 세로 크기를 의미합니다.

 

 

 

 

5.4 창(화면) 표시하기

window.show()

이 코드를 실행해야 창이 실제로 화면에 표시됩니다.

 

QWidget()으로 창 객체를 만들고, show()를 호출해야 화면에 표시됩니다.

show()를 호출하지 않으면 창 객체는 만들어지지만 화면에는 보이지 않습니다.

 

show()는 다음과 같은 의미에 가깝습니다.

 window 객체를 화면에 보이도록 등록해 주세요.


6. sys.exit(app.exec())

더보기

6.1 app.exec()

app.exec()

app.exec()는 PySide6 프로그램의 이벤트 루프(Event Loop)를 시작하는 코드입니다.

 

GUI 프로그램은 일반적인 콘솔 프로그램처럼 한 번 실행하고 바로 끝나는 구조가 아닙니다.

사용자가 창을 닫기 전까지 프로그램은 계속 실행되면서 여러 가지 입력과 동작을 기다립니다.

GUI 프로그램이 기다리는 대표적인 이벤트

  • 마우스 클릭
  • 키보드 입력
  • 창 이동
  • 창 크기 변경
  • 버튼 클릭
  • 창 닫기

이처럼 사용자의 입력과 화면 변화를 계속 감시하고 처리하는 구조를 이벤트 루프라고 합니다.

 

따라서 PySide6 프로그램에서 app.exec()가 실행되어야 프로그램이 종료되지 않고, 마우스 클릭, 키보드 입력, 창 닫기 같은 사용자의 동작 이벤트를 계속 기다리도록 만드는 코드입니다.

 

 

 

 

6.2 window.show() vs app.exec()

window.show()는 창을 화면에 보여줄 준비와 요청을 하는 코드이고,

실제로 사용자의 입력을 계속 받고 프로그램이 살아 있게 만드는 핵심은 app.exec()입니다.

 

 

 

 

6.3 sys.exit()이란?

sys.exit(app.exec())

sys.exit()은 파이썬 프로그램을 종료할 때 사용하는 함수입니다.

 

app.exec()는 PySide6 프로그램이 종료될 때 종료 코드를 반환합니다.

그리고 sys.exit()은 그 종료 코드를 운영체제에 전달하면서 프로그램을 깔끔하게 종료합니다.

app.exec() → PySide6 이벤트 루프 실행
sys.exit(...) → 프로그램 종료 결과를 운영체제에 전달

 

 

 

6.4 sys.exit() 확인 예제

sys.exit()은 프로그램이 정상 종료되었는지, 오류로 종료되었는지를 운영체제에 알려줄 때 사용할 수 있습니다.

 

6.4.1. 정상 종료 예제

import sys

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

일반적으로 종료 코드 0은 정상 종료를 의미합니다.

 

6.3.2. 오류 종료 예제

import sys

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

일반적으로 종료 코드 1은 비정상 종료 또는 오류 종료를 의미합니다.

 

실제 개발에서는 이 종료 코드를 이용해 자동화 도구나 배치 파일이 다음 작업을 계속할지 중단할지 판단할 수 있습니다.