본문 바로가기
PYTHON(파이썬)/PYSIDE6(GUI)

PYSIDE 첫번째 APP

by eplus 2024. 10. 19.

 

이제 첫 번째 애플리케이션을 만들어 봅시다! Python 파일을 하나 만드세요. 파일 이름은 원하는 대로 지정할 수 있습니다(e.g. app.py). 이 파일에 우리의 간단한 애플리케이션을 작성할 것입니다.

 > 주의: 이 파일을 계속 편집하게 되므로 이전 버전으로 돌아갈 수 있도록 정기적으로 백업하는 것을 잊지 마세요.

 #### 애플리케이션 생성

아래는 첫 번째 애플리케이션의 소스 코드입니다. 이를 그대로 입력하고, 실수하지 않도록 주의하세요. 만약 실수하더라도, Python이 무엇이 잘못되었는지 알려줄 것입니다. 모든 내용을 입력하고 싶지 않다면, 이 책의 소스 코드에 파일이 포함되어 있습니다.

 ```python

from PySide6.QtWidgets import QApplication, QWidget

 # 커맨드 라인 인수에 접근하기 위해서만 필요합니다.

import sys

 # 애플리케이션 당 하나의 QApplication 인스턴스만 필요합니다.

# 앱에 커맨드 라인 인수를 허용하려면 sys.argv를 전달하세요.

# 커맨드 라인 인수를 사용하지 않을 경우 QApplication([])도 가능합니다.

app = QApplication(sys.argv)

 

# 우리의 창이 될 Qt 위젯을 만듭니다.

window = QWidget()

window.show()  # 중요!!!! 창은 기본적으로 숨겨져 있습니다.

 

# 이벤트 루프를 시작합니다.

app.exec()

 # 애플리케이션이 종료되고 이벤트 루프가 중지될 때까지 여기에 도달하지 않습니다.

```

 먼저 애플리케이션을 실행해 보세요. 다른 Python 스크립트와 마찬가지로 커맨드 라인에서 실행할 수 있습니다.

 ```bash

python app.py

```

 또는, 시스템에 따라 다르게 실행할 수 있습니다.

 ```bash

python3 app.py

```

 이제 다음 상자를 힌트로 사용할 수 있습니다.

 

> 실행! 이제 창을 볼 수 있습니다. Qt는 자동으로 일반적인 창 데코레이션을 생성하며, 창을 드래그하고 크기를 조절할 수 있습니다.

 실행 결과는 실행 중인 플랫폼에 따라 다르게 나타날 수 있습니다. 아래 이미지는 Windows, macOS, Linux(Ubuntu)에서 표시되는 창을 보여줍니다.

 #### 코드 분석

이제 코드를 한 줄씩 분석하여 어떤 일이 일어나는지 정확히 이해해 봅시다.

 먼저 애플리케이션에 필요한 PySide6 클래스를 가져옵니다. 여기서는 QApplication, 애플리케이션 핸들러, QWidget, 기본 빈 GUI 위젯을 QtWidgets 모듈에서 가져옵니다.

 ```python

from PySide6.QtWidgets import QApplication, QWidget

```

 Qt의 주요 모듈은 QtWidgets, QtGui, QtCore입니다.

 > 전역 임포트를 피하기 위해 from <module> import * 대신 사용합니다.

 

다음으로, sys.arg를 전달하여 QApplication의 인스턴스를 생성합니다. 이는 애플리케이션에 전달된 커맨드 라인 인수를 포함하는 Python 리스트입니다.

 

```python

app = QApplication(sys.argv)

```

 Qt를 제어하는 데 커맨드 라인 인수를 사용하지 않을 경우, 빈 리스트를 전달할 수 있습니다.

 ```python

app = QApplication([])

```

 그 다음으로, QWidget 인스턴스를 window라는 변수로 생성합니다.

 ```python

window = QWidget()

window.show()

```

 Qt에서 모든 최상위 위젯, 즉 부모가 없고 다른 위젯이나 레이아웃 내에 포함되지 않은 위젯은 창으로 나타납니다. 따라서 원하는 위젯으로 창을 만들 수 있습니다.

 > 창을 보이지 않게 하려면 .show()를 호출해야 합니다. .show()를 호출하지 않고 애플리케이션을 실행하면 종료할 방법이 없습니다.

 마지막으로, app.exec()를 호출하여 이벤트 루프를 시작합니다.

 이벤트 루프는 애플리케이션의 코어로, 사용자 상호작용을 처리합니다. 각 상호작용은 이벤트를 생성하며, 이벤트 루프는 이를 적절한 이벤트 핸들러로 전달합니다. 이벤트는 발생한 순서대로 처리됩니다.

 #### 창과 위젯

Qt에서는 어떤 위젯도 창이 될 수 있습니다. 예를 들어, 아래 예제에서는 QWidget QPushButton으로 교체했습니다. 이 예제를 실행하면 단일 푸시 버튼으로 구성된 창이 표시됩니다.

 ```python

import sys

from PySide6.QtWidgets import QApplication, QPushButton

 app = QApplication(sys.argv)

window = QPushButton("Push Me")

window.show()

app.exec()

```

 이것은 멋지지만, 단일 컨트롤로 구성된 UI는 거의 없습니다. 나중에 레이아웃을 사용하여 빈 QWidget 컨테이너 내에 다른 위젯을 결합하는 방법을 탐구할 것입니다.

 #### QMainWindow

QMainWindow는 애플리케이션의 주요 창으로 사용하기 위한 내장 위젯입니다. '주요 창'이라는 이름은 하나만 존재한다는 의미는 아니며, 애플리케이션에서 여러 QMainWindow 인스턴스를 가질 수 있습니다. 이 위젯은 메뉴, 도구 모음, 도킹 위젯과 같은 많은 일반적인 UI 기능을 제공합니다.

 

아래는 QMainWindow를 추가한 간단한 예제입니다.

 ```python

from PySide6.QtWidgets import QApplication, QMainWindow

import sys

 app = QApplication(sys.argv)

window = QMainWindow()

window.show()

app.exec()

```

 위 코드를 실행하면 이전과 동일하게 빈 창이 표시됩니다. QMainWindow를 상속하여 초기화 블록에서 창을 설정하는 것이 좋습니다. 이는 창의 디자인 및 동작을 모두 포함하여 코드를 정리하는 데 도움이 됩니다.

 ```python

import sys

from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton

 class MainWindow(QMainWindow):

    def __init__(self):

        super().__init__()

        self.setWindowTitle("My App")

        button = QPushButton("Press Me!")

        self.setCentralWidget(button)

 

app = QApplication(sys.argv)

window = MainWindow()

window.show()

app.exec()

```

 

이제 창의 제목을 "My App"으로 변경하고, 중앙에 QPushButton을 추가합니다. .setCentralWidget() 메서드를 사용하여 창의 중앙에 위젯을 배치할 수 있습니다.

 

 

위 코드를 실행하면 중앙에 QPushButton이 있는 창이 표시됩니다. 다음 섹션에서는 시그널과 슬롯을 사용하여 버튼을 클릭할 때 발생하는 동작을 정의하는 방법을 살펴보겠습니다.

windowend.py

import sys

from PySide6.QtCore import QSize
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
       
        self.setWindowTitle("My App")
       
        button = QPushButton("Press Me!")
        self.setFixedSize(QSize(400,400))
       
        self.setCentralWidget(button)
       
app = QApplication(sys.argv)

window = MainWindow()
window.show()

app.exec()

window1-4.py

from PySide6.QtWidgets import QApplication, QWidget

import sys

app = QApplication(sys.argv)
window = QWidget()
window.show()
app.exec()
import sys

from PySide6.QtWidgets import QApplication, QPushButton

app = QApplication(sys.argv)

window = QPushButton("Push Me")
window.show()

app.exec()
import sys
from PySide6.QtWidgets import QApplication, QMainWindow

app = QApplication(sys.argv)

window = QMainWindow()
window.show()

app.exec()
import sys
from PySide6.QtWidgets import (
    QApplication,
    QMainWindow,
    QPushButton)

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
       
        self.setWindowTitle("My App")
        button = QPushButton("Press Me!")
        self.setCentralWidget(button)
       
app = QApplication(sys.argv)

window = MainWindow()
window.show()

app.exec()

 

728x90
반응형

'PYTHON(파이썬) > PYSIDE6(GUI)' 카테고리의 다른 글

PYSIDE6 레이아웃  (0) 2024.10.22
PYSIDE6 위젯  (0) 2024.10.21
PYSIDE6 시그널과 슬롯  (0) 2024.10.20
QT?  (0) 2024.10.19
GUI의 간략한 역사  (0) 2024.10.19