-
PYSIDE6 창PYTHON(파이썬)/PYSIDE6(GUI) 2024. 10. 24. 06:26728x90반응형
애플리케이션은 일반적으로 여러 창을 사용하여 다양한 정보를 표시하거나 다른 작업을 수행합니다. 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 sysfrom 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