ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • PYSIDE 첫번째 APP
    PYTHON(파이썬)/PYSIDE6(GUI) 2024. 10. 19. 08:23
    728x90
    반응형

     

    이제 첫 번째 애플리케이션을 만들어 봅시다! 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
Designed by Tistory.