이번 단계에서는 PySide6 프로그램을 한 파일에서 작성하는 방식에서 벗어나, 실행 코드 화면 코드를 나누는 방법을 학습합니다.

1. 이전 단계 코드 분리하기

더보기

1.1 두번째 디렉토리를 생성하고, 파이썬 파일을 준비합니다.

 

 

 

 

1.2. 첫번째 예제(링크)의 소스 코드를, main.py 에 복사합니다.

main.py

import sys
from PySide6.QtWidgets import QApplication, QWidget
 
app = QApplication(sys.argv)
widget = QWidget()
widget.show()
sys.exit(app.exec())

 

 

 

 

1.3. QWidget 에 세부 설정 2가지 추가해보기 

main.py

import sys
from PySide6.QtWidgets import QApplication, QWidget
 
app = QApplication(sys.argv)
widget = QWidget()

widget.setWindowTitle("QWidget 예시") # 추가 1
widget.resize(300, 200) # 추가 2

widget.show()
app.exec()

코드 설명
setWindowTitle() 창 제목을 설정합니다.
resize(300, 200) 창 크기를 가로 300, 세로 200으로 설정합니다.

창 제목과 창 크기 지정 디자인을 소스 코드에서 직접 수동으로 구현해야 함을 기억합니다.

이 방식은 창을 직접 만들고, 그 창의 크기와 제목과 같은 속성을 코드에서 하나씩 설정하는 방식입니다.

문제는, 프로그램이 커지면 이런 속성 지정 코드가 계속 늘어나고, 실행 코드와 함께 작성하면 가독성이 떨어집니다.

 

 

 

 

1.4. "widget 디자인" 로직 → 사용자 정의 디자인 클래스로 분리하기 

이제 QWidget 을 main.py 에서 직접 구현하는 대신,

QWidget 관련 로직을 별도의 파일에 분할해 보겠습니다.

새 파이썬 파일을 만들고, 이름을 widget_test.py로 지정합니다.

 

widget_test.py

from PySide6.QtWidgets import QWidget

class MyWidget(QWidget):  # 사용자 정의 클래스
    def __init__(self):
        super().__init__()

        self.setWindowTitle("사용자 정의 클래스 예시")
        self.resize(300, 200)

 

 

 

 

1.5. main.py 파일에서 작성한 widget 부분을, widget_test.py 의 MyWidget 으로 대체합니다.

 

main.py

import sys
from PySide6.QtWidgets import QApplication, QWidget

from mainwindow import MyWidget

app = QApplication(sys.argv)
widget = MyWidget()

# widget.setWindowTitle("QWidget 예시") # 추가 1 제거, MyWidget 에 구현
# widget.resize(300, 200) # 추가 2 제거, MyWidget 에 구현

widget.show()
sys.exit(app.exec())
1.3. QWidget 과 비교
widget_test.py 파일의 MyWdiget 을 사용하도록 변경

 

 

 

 

1.6. main.py 실행합니다.

widget_test.py 파일의 크기, 제목을 수정하면서, main에서 실행된 위젯에 반영되는지 확인합니다.


2. main.py 로 만들기

더보기

2.1. 왜 main.py를 분리할까?

PySide6 프로그램은 크게 두 가지 역할로 나누어 생각할 수 있습니다.

구분 역할 비유
main.py 프로그램을 시작하고 실행 흐름을 관리하는 파일 프로그램의 시작 버튼
widget_test.py 화면에 표시될 창 클래스를 정의하는 파일 창의 설계도

핵심 포인트
widget_test.py는 화면을 어떻게 만들지 적어 둔 파일입니다.
실제로 실행해야 하는 파일은 main.py입니다.

 



 

2.2. 프로젝트 파일 구조

프로그램에서는 보통 역할에 따라 파일을 나눕니다.

main.py
→ 프로그램을 시작하는 파일

widget_test.py
→ 화면 클래스를 정의하는 파일
project/
├── main.py
└── widget_test.py

 

 

 

 

2.3. widget_test.py 는 화면을 만드는 파일입니다.

from PySide6.QtWidgets import QWidget

class MyWidget(QWidget):  # 사용자 정의 클래스
    def __init__(self):
        super().__init__()

        self.setWindowTitle("사용자 정의 클래스 예시")
        self.resize(300, 200)

 

 

 

 

2.4. main.py 만들기

main.py 파일에서는 프로그램 실행 코드 역할을 하도록 정리합니다.

import sys
from PySide6.QtWidgets import QApplication, QWidget

from mainwindow import MyWidget

app = QApplication(sys.argv)
widget = MyWidget()

widget.show()
sys.exit(app.exec())

 

 

 

 

2.5. 더 좋은 main 구조 만들기

메인 함수는 프로그램의 시작 흐름을 한곳에 모으기 위해 사용합니다.

import sys
from PySide6.QtWidgets import QApplication

from widget_test import MyWidget

if __name__ == "__main__":
    app = QApplication(sys.argv)
    widget = MyWidget()
    widget.show()
    sys.exit(app.exec())

 

또는 아래와 같이 main() 역할을 별도의 함수로 묶을 수 있습니다.

import sys
from PySide6.QtWidgets import QApplication

from mainwindow import MyWidget

def main():
    app = QApplication(sys.argv)
    widget = MyWidget()
    widget.show()
    return app.exec()

if __name__ == "__main__":
    sys.exit(main())

 

 

 

2.6. if __name__ == "__main__": 의미

if __name__ == "__main__":
    sys.exit(main())

이 파일이 직접 실행될 때만 main() 함수를 실행하라.

 

 

예를 들어 터미널에서 이렇게 실행하면:

python main.py

main() 함수가 실행됩니다.

 

하지만 다른 파일에서 main.py를 import 할 때는 자동 실행되지 않습니다.

 

 

프로그램이 작을 때는 한 파일에 모든 소스코드를 작성해도 됩니다.
하지만 프로그램이 커질수록 화면 코드와 실행 코드를 분리해야 관리하기 쉽고, 협업하기 쉽습습니다.
그래서 widget_test.py 와 같이 화면 클래스를 별도로 작성하고, main.py에서는 실행 관련 로직만 작성합니다.

 

 

 

 

핵심 정리

main.py는 프로그램의 시작점입니다.
widget_test py는 화면 클래스를 정의하는 파일입니다.
프로그램이 커질수록 실행 코드와 화면 코드를 분리하는 습관이 중요합니다.

3. 파이참 시작 파일 설정

더보기

파이참 시작 파일 설정

 

3.4. 파이참 시작 파일 설정

Run/debug configurations | PyCharm Documentation Run/debug configurations | PyCharm www.jetbrains.com

basiclike.tistory.com

 

파일을 여러개의 파일로 분할하여 개발 한 뒤에는

PyCharm에서 실행시 시작 파일을 잘못 선택하는 경우가 많습니다.

 

예를 들어 widget_test.py를 실행하면 창이 뜨지 않거나, 원하는 결과가 나오지 않을 수 있습니다.

위 링크와 같이 설정하면, PyCharm에서 항상 main.py를 기준으로 프로그램을 실행할 수 있습니다.