본문 바로가기
프로그래밍/Python

Pyside6 ] 개발 환경 설정 with VSCode

by eteo 2024. 6. 8.

 

 

 

pyside6 설치

 

pip install pyside6

 

 

 

 

 

 

 

VScode에서 Qt for Python 익스텐션 설치

 

 

 

 

 

 

 

 

test.py를 만들고 공식문서에서 제공한 코드를 복붙한 후 콘솔에서 python test.py로 실행한다.

 

https://doc.qt.io/qtforpython-6/tutorials/basictutorial/widgets.html

import sys
from PySide6.QtWidgets import QApplication, QLabel

app = QApplication(sys.argv)
label = QLabel("Hello World!")
label.show()
app.exec()

 

 

 

 

한줄 씩 살펴보면 다음과 같다.

# command line arguments에 접근하기 위해 필요하다.
import sys

# PySide6 클래스 QtWidgets 모듈에서 QApplication과 QLabel을 import 한다.
from PySide6.QtWidgets import QApplication, QLabel

# QApplication 인스턴스를 만들고 명령줄 인수인 sys.argv를 넘긴다.
app = QApplication(sys.argv)

# QLabel 인스턴스를 만드로 라벨의 텍스트를 "Hello World!"로 셋한다.
label = QLabel("Hello World!")

# label을 visible하도록 한다.
label.show()

# event loop를 실행한다.
app.exec()

 

 

 

 

app.exec()으로 이벤트 루프가 시작되는데 이벤트 루프란?

 

https://www.pythonguis.com/tutorials/pyside6-creating-your-first-window/

 

 

GUI와 모든 사용자 상호 작용을 관리하는 핵심 루프로 키 누르기, 마우스 클릭, 마우스 이동 등의 상호작용이 이벤트를 생성해 이벤트 대기열에 배치되고, 이벤트 루프에서는 반복할 때 마다 큐를 확인해 대기중인 이벤트가 발견되면 이벤트와 컨트롤을 특정 이벤트 핸들러로 전달하며, 이벤트 핸들러가 이벤트를 처리한 다음 제어권은 다시 이벤트 루프로 돌아간다. 실행중인 이벤트 루프는 응용 프로그램 당 하나만 있다.

 

 

 

 

다음 QtDesigner를 사용해 앱을 만들어보자.

 

VSCode 작업영역에서 마우스 우클릭해 Create Qt UI File을 클릭해 ui_test.ui 파일을 생성해준다.

 

 

 

 

 

Qt Designer가 뜨면 Main Window를 하나 생성한다.

 

 

 

다음과 같이 간단한 위젯을 만들어 배치하고 위젯 객체의 이름을 식별하기 쉽게 변경해줬다.

 

 

 

 

Qt Designer 파일을 저장하고 나오면 아까 GUI로 편집한 내용이 다음과 같이 QML로 써있다.

 

 

 

 

그리고 아까 설치한 Qt for Python 익스텐션을 통해 .ui파일 저장과 동시에 pyside6-uic.exe를 통해서 .ui파일을 .py파일로 변환해 생성해준다.

 

 

 

pyside6-uic.exe -o 옵션으로 생성할 .py 파일명도 익스텐션 세팅에 들어가 변경할 수 있다.

 

 

 

 

test.py를 다음과 같이 수정해 QtDesigner로 생성한 파일과 연결한다.

 

import sys
from PySide6.QtWidgets import QApplication, QMainWindow
from PySide6.QtCore import QFile
# ui_test.py에서 Ui MainWindow를 import한다.
from ui_test import Ui_MainWindow

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        # setupUi 함수를 호출해 MainWindow에 있는 위젯을 배치한다.
        self.ui.setupUi(self)
        
        # button clicked 이벤트 핸들러로 button_clicked 함수와 연결한다.		
        self.ui.button.clicked.connect(self.button_clicked)
    
    def button_clicked(self):
    	# input 위젯의 텍스트를 output 위젯에 셋한다.
        inputText = self.ui.input.text()
        self.ui.output.setText('{0}'.format(inputText))

if __name__ == "__main__":
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    sys.exit(app.exec())