ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • PYSIDE6 창
    PYTHON(파이썬)/PYSIDE6(GUI) 2024. 10. 24. 06:26
    728x90
    반응형

    애플리케이션은 일반적으로 여러 창을 사용하여 다양한 정보를 표시하거나 다른 작업을 수행합니다. PySide6에서는 이러한 작업을 쉽게 처리할 수 있도록 다양한 창 클래스를 제공합니다. 이 장에서는 메인 윈도우, 서브 윈도우, 다이얼로그 등을 포함한 다양한 창을 사용하는 방법을 살펴보겠습니다.

     

    #### QMainWindow

    QMainWindow는 애플리케이션의 주 창으로 사용되며, 메뉴 바, 도구 모음, 상태 표시줄 등을 포함할 수 있습니다.

     

    **QMainWindow 예제**

    ```python

    import sys

    from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QToolBar, QStatusBar

     

    class MainWindow(QMainWindow):

        def __init__(self):

            super().__init__()

            self.setWindowTitle("QMainWindow Example")

     

            # 중앙 위젯 설정

            button = QPushButton("Press Me")

            self.setCentralWidget(button)

     

            # 도구 모음 추가

            toolbar = QToolBar("Main Toolbar")

            self.addToolBar(toolbar)

     

            # 상태 표시줄 추가

            self.setStatusBar(QStatusBar(self))

     

    app = QApplication(sys.argv)

    window = MainWindow()

    window.show()

    app.exec()

    ```

    이 예제는 중앙에 버튼이 있는 기본 QMainWindow를 생성하고, 도구 모음과 상태 표시줄을 추가합니다.

     

    #### 다중 창 애플리케이션

    다중 창 애플리케이션을 만들기 위해 서브 윈도우를 생성할 수 있습니다. 서브 윈도우는 QDialog 또는 다른 QMainWindow 인스턴스를 사용할 수 있습니다.

     

    **서브 윈도우 예제**

    ```python

    import sys

    from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QDialog, QVBoxLayout, QLabel

     

    class SubWindow(QDialog):

        def __init__(self):

            super().__init__()

            self.setWindowTitle("Sub Window")

            layout = QVBoxLayout()

            layout.addWidget(QLabel("This is a sub window"))

            self.setLayout(layout)

     

    class MainWindow(QMainWindow):

        def __init__(self):

            super().__init__()

            self.setWindowTitle("Main Window")

            button = QPushButton("Open Sub Window")

            button.clicked.connect(self.open_sub_window)

            self.setCentralWidget(button)

     

        def open_sub_window(self):

            dialog = SubWindow()

            dialog.exec()

     

    app = QApplication(sys.argv)

    window = MainWindow()

    window.show()

    app.exec()

    ```

    이 예제는 메인 윈도우에서 버튼을 클릭하면 서브 윈도우를 여는 다중 창 애플리케이션을 생성합니다.

     

    #### MDI (다중 문서 인터페이스)

    MDI는 여러 자식 창을 하나의 부모 창 내에서 관리하는 데 사용됩니다. QMainWindow QMdiArea 클래스를 사용하여 MDI 애플리케이션을 만들 수 있습니다.

     

    **MDI 예제**

    ```python

    import sys

    from PySide6.QtWidgets import QApplication, QMainWindow, QMdiArea, QMdiSubWindow, QTextEdit

     

    class MainWindow(QMainWindow):

        def __init__(self):

            super().__init__()

            self.setWindowTitle("MDI Example")

     

            # MDI 영역 생성

            mdi = QMdiArea()

            self.setCentralWidget(mdi)

     

            # 서브 윈도우 생성 및 추가

            sub1 = QMdiSubWindow()

            sub1.setWidget(QTextEdit())

            sub1.setWindowTitle("Subwindow 1")

            mdi.addSubWindow(sub1)

     

            sub2 = QMdiSubWindow()

            sub2.setWidget(QTextEdit())

            sub2.setWindowTitle("Subwindow 2")

            mdi.addSubWindow(sub2)

     

            sub1.show()

            sub2.show()

     

    app = QApplication(sys.argv)

    window = MainWindow()

    window.show()

    app.exec()

    ```

    이 예제는 여러 자식 창을 관리하는 MDI 애플리케이션을 생성합니다. 각 자식 창은 QMdiSubWindow로 생성되며, QMdiArea에 추가됩니다.

     

    #### 다이얼로그

    다이얼로그는 일반적으로 사용자 입력을 받거나 정보를 제공하는 데 사용됩니다. QDialog 클래스를 사용하여 다이얼로그를 생성할 수 있습니다.

     

    **QDialog 예제**

    ```python

    import sys

    from PySide6.QtWidgets import QApplication, QMainWindow, QDialog, QVBoxLayout, QLabel, QPushButton, QDialogButtonBox

     

    class CustomDialog(QDialog):

        def __init__(self):

            super().__init__()

            self.setWindowTitle("Custom Dialog")

            layout = QVBoxLayout()

            layout.addWidget(QLabel("This is a custom dialog"))

           

            buttons = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)

            buttons.accepted.connect(self.accept)

            buttons.rejected.connect(self.reject)

            layout.addWidget(buttons)

     

            self.setLayout(layout)

     

    class MainWindow(QMainWindow):

        def __init__(self):

            super().__init__()

            self.setWindowTitle("Main Window")

            button = QPushButton("Open Dialog")

            button.clicked.connect(self.open_dialog)

            self.setCentralWidget(button)

     

        def open_dialog(self):

            dialog = CustomDialog()

            if dialog.exec():

                print("Dialog accepted")

            else:

                print("Dialog rejected")

     

    app = QApplication(sys.argv)

    window = MainWindow()

    window.show()

    app.exec()

    ```

    이 예제는 메인 윈도우에서 버튼을 클릭하면 사용자 정의 다이얼로그를 여는 애플리케이션을 생성합니다. 사용자가 다이얼로그에서 확인 또는 취소 버튼을 클릭하면 해당 상태를 출력합니다.

     

    ### 결론

    이 장에서는 PySide6를 사용하여 다양한 유형의 창을 생성하고 관리하는 방법을 살펴보았습니다. QMainWindow, 서브 윈도우, MDI, 다이얼로그 등을 통해 애플리케이션을 더욱 기능적으로 만들 수 있습니다. 다음 장에서는 이벤트를 처리하는 방법을 알아보겠습니다.

    import sys

    from PySide6.QtWidgets import (
        QApplication,
        QMainWindow,
        QLabel,
        QPushButton,
        QVBoxLayout,
        QWidget,
    )

    class AnotherWindow(QWidget):
        def __init__(self):
            super().__init__()
            layout = QVBoxLayout()
            self.label = QLabel("Another Window")
            layout.addWidget(self.label)
            self.setLayout(layout)
           
    class MainWindow(QMainWindow):
        def __init__(self):
            super().__init__()
            self.button = QPushButton("Push for Window")
            self.button.clicked.connect(self.show_new_window)
            self.setCentralWidget(self.button)
           
        def show_new_window(self, is_checked):
            #w = AnotherWindow()
            #w.show()
            # ->
            self.w = AnotherWindow()
            self.w.show()
           
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    app.exec()
    import sys

    from random import randint

    from PySide6.QtWidgets import (
        QApplication,
        QMainWindow,
        QLabel,
        QPushButton,
        QVBoxLayout,
        QWidget,
    )

    class AnotherWindow(QWidget):
        def __init__(self):
            super().__init__()
            layout = QVBoxLayout()
            self.label = QLabel("Another Window %d" % randint(0, 100))
            layout.addWidget(self.label)
            self.setLayout(layout)
           
    class MainWindow(QMainWindow):
        def __init__(self):
            super().__init__()
            self.w = AnotherWindow()
            self.button = QPushButton("Push for Window")
            #self.button.clicked.connect(self.show_new_window)
            self.button.clicked.connect(self.toggle_window)
            self.setCentralWidget(self.button)
           
        def show_new_window(self, is_checked):
            self.w.show()
           
        def toggle_window(self, is_checked):
            if self.w.isVisible():
                self.w.hide()
            else:
                self.w.show()
           
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    app.exec()
    import sys
    from random import randint

    from PySide6.QtWidgets import (
        QApplication,
        QMainWindow,
        QLabel,
        QPushButton,
        QVBoxLayout,
        QWidget,
        QLineEdit,
    )

    class AnotherWindow(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle("Another")
            layout = QVBoxLayout()
            self.label = QLabel("Another Window")
            layout.addWidget(self.label)
            self.setLayout(layout)
           
    class MainWindow(QMainWindow):
        def __init__(self):
            super().__init__()
            self.w = AnotherWindow()
            self.button = QPushButton("Push for Window")
            self.button.clicked.connect(self.toggle_window)
            self.input = QLineEdit()
            self.input.textChanged.connect(self.w.label.setText)
           
            layout = QVBoxLayout()
            layout.addWidget(self.button)
            layout.addWidget(self.input)
            container = QWidget()
            container.setLayout(layout)
           
            self.setCentralWidget(container)
           
        def toggle_window(self, is_checked):
            if self.w.isVisible():
                self.w.hide()
            else:
                self.w.show()
               
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    app.exec()

     

     

    728x90

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

    PYSIDE6 QT디자이너 설치  (3) 2024.10.24
    PYSIDE6 이벤트  (0) 2024.10.24
    PYSIDE6 대화상자  (1) 2024.10.24
    PYSIDE6 액션, 도구 모음, 메뉴  (0) 2024.10.23
    PYSIDE6 레이아웃  (0) 2024.10.22
Designed by Tistory.