GUI 애플리케이션은 일반적으로 사용자가 명령을 쉽게 접근할 수 있도록 도구 모음과 메뉴를 제공합니다. PySide6에서는 이러한 기능을 구현하는 데 필요한 다양한 클래스와 메서드를 제공합니다. 이 장에서는 액션, 도구 모음, 메뉴를 사용하여 애플리케이션을 더욱 기능적으로 만드는 방법을 살펴보겠습니다.
#### 액션
액션은 메뉴 항목이나 도구 모음 버튼과 같은 사용자 인터페이스 요소에 연결된 명령입니다. QAction 클래스를 사용하여 액션을 생성할 수 있습니다.
**QAction 사용하기**
```python
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QAction, QMessageBox
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QAction Example")
# 액션 생성
action = QAction("Say Hello", self)
action.triggered.connect(self.say_hello)
# 메뉴 생성 및 액션 추가
menu = self.menuBar().addMenu("File")
menu.addAction(action)
def say_hello(self):
QMessageBox.information(self, "Hello", "Hello, World!")
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
```
이 예제에서 QAction을 생성하고, 메뉴에 추가한 다음, 해당 액션이 트리거될 때 슬롯을 호출하도록 연결했습니다.
#### 도구 모음
도구 모음은 일반적으로 아이콘 버튼으로 구성된 일련의 명령입니다. QToolBar 클래스를 사용하여 도구 모음을 생성할 수 있습니다.
**QToolBar 사용하기**
```python
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QToolBar, QAction, QMessageBox
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QToolBar Example")
# 액션 생성
action = QAction("Say Hello", self)
action.triggered.connect(self.say_hello)
# 도구 모음 생성 및 액션 추가
toolbar = QToolBar("My Toolbar")
toolbar.addAction(action)
self.addToolBar(toolbar)
def say_hello(self):
QMessageBox.information(self, "Hello", "Hello, World!")
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
```
이 예제에서 QToolBar를 생성하고, QAction을 도구 모음에 추가한 다음, 도구 모음을 메인 창에 추가했습니다.
#### 메뉴
메뉴는 사용자가 명령을 선택할 수 있도록 도와주는 중요한 인터페이스 요소입니다. QMenuBar와 QMenu 클래스를 사용하여 메뉴를 생성할 수 있습니다.
**QMenuBar와 QMenu 사용하기**
```python
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QAction, QMenu
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QMenu Example")
# 액션 생성
action = QAction("Say Hello", self)
action.triggered.connect(self.say_hello)
# 메뉴 생성 및 액션 추가
menu_bar = self.menuBar()
file_menu = menu_bar.addMenu("File")
file_menu.addAction(action)
def say_hello(self):
QMessageBox.information(self, "Hello", "Hello, World!")
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
```
이 예제에서 QMenuBar를 생성하고, QMenu를 추가한 다음, 해당 메뉴에 QAction을 추가했습니다.
#### 상태 표시줄
상태 표시줄은 애플리케이션의 하단에 위치하여 사용자에게 상태 메시지를 제공하는 영역입니다. QStatusBar 클래스를 사용하여 상태 표시줄을 생성할 수 있습니다.
**QStatusBar 사용하기**
```python
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QStatusBar
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QStatusBar Example")
# 상태 표시줄 생성 및 설정
status_bar = QStatusBar()
self.setStatusBar(status_bar)
status_bar.showMessage("Ready")
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
```
이 예제에서 QStatusBar를 생성하고, 이를 메인 창에 설정한 다음, 메시지를 표시했습니다.
#### 결론
이 장에서는 PySide6에서 액션, 도구 모음, 메뉴 및 상태 표시줄을 사용하는 방법을 살펴보았습니다. 이러한 요소를 사용하면 사용자가 애플리케이션을 더 쉽게 탐색하고 사용할 수 있게 할 수 있습니다. 다음 장에서는 대화 상자를 사용하여 사용자와 상호 작용하는 방법을 알아보겠습니다.
import sys
from PySide6.QtCore import Qt
from PySide6.QtWidgets import (
QApplication,
QMainWindow,
QLabel,
QToolBar,
)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
label = QLabel("Hello")
label.setAlignment(Qt.AlignCenter)
self.setCentralWidget(label)
toolbar = QToolBar("My main Toolbar")
self.addToolBar(toolbar)
def onMyToolBarButtonClick(self, is_checked):
print("click", is_checked)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
import sys
from PySide6.QtCore import Qt
from PySide6.QtGui import QAction
from PySide6.QtWidgets import (
QApplication,
QMainWindow,
QLabel,
QToolBar,
)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
label = QLabel("Hello")
label.setAlignment(Qt.AlignCenter)
self.setCentralWidget(label)
toolbar = QToolBar("My main toolbar")
self.addToolBar(toolbar)
button_action = QAction("Your button", self)
button_action.setStatusTip("This is your button")
button_action.triggered.connect(self.onMyToolBarButtonClick)
toolbar.addAction(button_action)
def onMyToolBarButtonClick(self, is_checked):
print("click", is_checked)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
import sys
from PySide6.QtCore import Qt
from PySide6.QtGui import QAction
from PySide6.QtWidgets import (
QApplication,
QMainWindow,
QLabel,
QToolBar,
QStatusBar,
)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
label = QLabel("Hello")
label.setAlignment(Qt.AlignCenter)
self.setCentralWidget(label)
toolbar = QToolBar("My main toolbar")
self.addToolBar(toolbar)
button_action = QAction("Your button", self)
button_action.setStatusTip("This is your button")
button_action.triggered.connect(self.onMyToolBarButtonClick)
toolbar.addAction(button_action)
self.setStatusBar(QStatusBar(self))
def onMyToolBarButtonClick(self, is_checked):
print("click", is_checked)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
import os
import sys
from PySide6.QtCore import QSize, Qt
from PySide6.QtGui import QAction, QIcon
from PySide6.QtWidgets import (
QApplication,
QMainWindow,
QLabel,
QToolBar,
QStatusBar,
)
basedir = os.path.dirname(__file__)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
label = QLabel("Hello")
label.setAlignment(Qt.AlignCenter)
self.setCentralWidget(label)
toolbar = QToolBar("My main toolbar")
toolbar.setIconSize(QSize(16,16))
self.addToolBar(toolbar)
button_action = QAction(
QIcon(os.path.join(basedir, "m.jpg")),
"Your button",
self,
)
button_action.setStatusTip("This is your button")
button_action.triggered.connect(self.onMyToolBarButtonClick)
button_action.setCheckable(True)
toolbar.addAction(button_action)
self.setStatusBar(QStatusBar(self))
def onMyToolBarButtonClick(self, is_checked):
print("click", is_checked)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
import os
import sys
from PySide6.QtCore import QSize, Qt
from PySide6.QtGui import QAction, QIcon, QKeySequence
from PySide6.QtWidgets import (
QApplication,
QMainWindow,
QCheckBox,
QLabel,
QStatusBar,
QToolBar,
)
basedir = os.path.dirname(__file__)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
label = QLabel("hello")
label.setAlignment(Qt.AlignCenter)
self.setCentralWidget(label)
toolbar = QToolBar("My main toolbar")
toolbar.setIconSize(QSize(16,16))
self.addToolBar(toolbar)
button_action = QAction(QIcon("m.jpg"),"&Your button", self )
button_action.setStatusTip("This is your button")
button_action.triggered.connect(self.onMyToolBarButtonClick)
button_action.setCheckable(True)
button_action.setShortcut(QKeySequence("Ctrl+p"))
toolbar.addAction(button_action)
toolbar.addSeparator()
button_action2 = QAction(QIcon("b.jpg"), "Your button2", self)
button_action2.setStatusTip("This is button2")
button_action2.triggered.connect(self.onMyToolBarButtonClick)
button_action2.setCheckable(True)
toolbar.addAction(button_action2)
toolbar.addWidget(QLabel("Hello"))
toolbar.addWidget(QCheckBox())
self.setStatusBar(QStatusBar(self))
menu = self.menuBar()
file_menu = menu.addMenu("&File")
file_menu.addAction(button_action)
file_menu.addSeparator()
file_submenu = file_menu.addMenu("Submenu")
file_submenu.addAction(button_action2)
def onMyToolBarButtonClick(self, is_checked):
print("click", is_checked)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()