-
PYSIDE 첫번째 APPPYTHON(파이썬)/PYSIDE6(GUI) 2024. 10. 19. 08:23728x90반응형
이제 첫 번째 애플리케이션을 만들어 봅시다! 새 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 QSizefrom 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 sysfrom PySide6.QtWidgets import QApplication, QMainWindow
app = QApplication(sys.argv)
window = QMainWindow()window.show()
app.exec()import sysfrom 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