PyQt개발강좌, QToolBar로 툴바 구성하기

이번 강좌에서는 PyQt를 이용하여 QToolBar를 구성하고 활용하는 방법에 대해 자세히 알아보겠습니다. QToolBar는 어플리케이션의 도구 모음으로, 사용자에게 다양한 기능을 손쉽게 제공하는 UI 요소입니다. 강좌는 QToolBar의 기본 설정부터 시작하여, 사용자 정의 아이콘 및 툴바의 배치 방법, 그리고 툴바의 신호와 슬롯을 활용한 간단한 기능 구현까지 포함됩니다.

1. PyQt 및 QToolBar 소개

PyQt는 Python 프로그래밍 언어를 위한 Qt의 바인딩 라이브러리입니다. PyQt를 사용하면 다양한 플랫폼에서 GUI 어플리케이션을 쉽게 개발할 수 있습니다. QToolBar는 Qt에서 제공하는 위젯 중 하나로, 도구 버튼, 드롭다운 메뉴, 그리고 기타 위젯들을 수평 또는 수직으로 배치할 수 있는 컨테이너입니다. 이러한 툴바는 사용자 경험을 향상시키고, 자주 사용하는 기능에 빠르게 접근할 수 있도록 합니다.

2. 기본 QToolBar 만들기

가장 기본적인 QToolBar를 만드는 방법부터 알아보겠습니다. 아래 코드는 PyQt5를 사용하여 단순한 툴바를 생성하는 예제입니다.

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QToolBar, QAction

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        # 타이틀과 윈도우 크기 설정
        self.setWindowTitle("QToolBar 예제")
        self.setGeometry(100, 100, 600, 400)

        # 툴바 생성
        self.create_toolbar()

    def create_toolbar(self):
        # 툴바 객체 생성
        toolbar = QToolBar("내 툴바", self)
        self.addToolBar(toolbar)

        # 액션 생성
        action1 = QAction("작업 1", self)
        action2 = QAction("작업 2", self)

        # 액션을 툴바에 추가
        toolbar.addAction(action1)
        toolbar.addAction(action2)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

위 코드를 실행하면 기본적인 QToolBar가 포함된 어플리케이션 창이 나타납니다. ‘작업 1’과 ‘작업 2’라는 두 개의 액션이 툴바에 표시됩니다.

3. QToolBar에 아이콘 추가하기

툴바에 액션을 추가할 때, 텍스트 대신 아이콘을 사용하는 것이 가능합니다. 이를 통해 사용자가 더욱 직관적으로 기능을 사용할 수 있습니다. 아래 예제에서는 아이콘을 추가하는 방법을 보여줍니다.

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QToolBar, QAction
from PyQt5.QtGui import QIcon

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("QToolBar 아이콘 예제")
        self.setGeometry(100, 100, 600, 400)

        self.create_toolbar()

    def create_toolbar(self):
        toolbar = QToolBar("아이콘 툴바", self)
        self.addToolBar(toolbar)

        # 아이콘과 텍스트를 가진 액션 생성
        action1 = QAction(QIcon('icon1.png'), "작업 1", self)
        action2 = QAction(QIcon('icon2.png'), "작업 2", self)

        toolbar.addAction(action1)
        toolbar.addAction(action2)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

위 코드에서 <icon1.png>와 <icon2.png>는 각각 ‘작업 1’과 ‘작업 2’에 대한 아이콘 파일의 경로입니다. 이 파일들이 실행되는 스크립트와 동일한 디렉토리에 있어야 합니다.

4. 툴바의 사용자 정의 및 기능 구현

QToolBar는 UI 요소들을 효율적으로 배치하고 다양한 기능을 구현할 수 있는 강력한 도구입니다. 아래 예제에서는 버튼을 클릭했을 때 신호와 슬롯을 활용하여 기능을 실행하는 방법을 설명합니다.

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QToolBar, QAction, QMessageBox
from PyQt5.QtGui import QIcon

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("QToolBar 신호와 슬롯 예제")
        self.setGeometry(100, 100, 600, 400)

        self.create_toolbar()

    def create_toolbar(self):
        toolbar = QToolBar("기능 툴바", self)
        self.addToolBar(toolbar)

        action1 = QAction(QIcon('icon1.png'), "작업 1", self)
        action2 = QAction(QIcon('icon2.png'), "작업 2", self)
        
        # 신호와 슬롯 연결
        action1.triggered.connect(self.action1_triggered)
        action2.triggered.connect(self.action2_triggered)

        toolbar.addAction(action1)
        toolbar.addAction(action2)

    def action1_triggered(self):
        QMessageBox.information(self, "작업 1", "작업 1이 실행되었습니다.")

    def action2_triggered(self):
        QMessageBox.information(self, "작업 2", "작업 2가 실행되었습니다.")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

위 예제에서는 버튼을 클릭하면 메시지 박스가 나타나는 기능을 추가했습니다. 각 액션의 triggered 신호에 메서드를 연결하였습니다. 이를 통해 사용자가 각 버튼을 클릭했을 때 특정 동작이 실행됩니다.

5. 툴바의 위치 및 표시 방식 조정

QToolBar는 화면의 다양한 위치에 배치할 수 있습니다. 위쪽, 아래쪽, 왼쪽, 또는 오른쪽으로 배치할 수 있으며, 사용자는 툴바를 드래그하여 위치를 바꿀 수도 있습니다. 아래 예제에서는 툴바 위치를 변경하는 방법을 보여줍니다.

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QToolBar, QAction, QMessageBox
from PyQt5.QtGui import QIcon

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("QToolBar 위치 조정 예제")
        self.setGeometry(100, 100, 600, 400)

        self.create_toolbar()

    def create_toolbar(self):
        toolbar = QToolBar("위치 조정 툴바", self)
        self.addToolBar(toolbar)

        action1 = QAction(QIcon('icon1.png'), "작업 1", self)
        action2 = QAction(QIcon('icon2.png'), "작업 2", self)

        action1.triggered.connect(self.action1_triggered)
        action2.triggered.connect(self.action2_triggered)

        toolbar.addAction(action1)
        toolbar.addAction(action2)

        # 툴바를 아래쪽에 배치
        self.addToolBar(Qt.BottomToolBarArea, toolbar)

    def action1_triggered(self):
        QMessageBox.information(self, "작업 1", "작업 1이 실행되었습니다.")

    def action2_triggered(self):
        QMessageBox.information(self, "작업 2", "작업 2가 실행되었습니다.")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

여기서 추가적인 옵션으로 툴바를 최상단(상단 도구 모음), 최하단(하단 도구 모음), 왼쪽, 오른쪽에 배치할 수 있습니다. 위 예제에서는 Qt.BottomToolBarArea를 사용하여 툴바를 하단에 배치하였습니다.

6. QToolBar의 지속성 및 저장하기

어떤 툴바의 위치와 설정은 어플리케이션 사용자가 닫을 때까지 유지하지 않지만 사용자가 자주 사용하는 설정을 저장하여 다음 실행 시에도 반영할 수 있습니다. 이를 위해 우리는 설정을 파일 또는 데이터베이스에 저장할 수 있습니다. 아래는 툴바의 위치를 저장하는 간단한 예제입니다.

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QToolBar, QAction, QMessageBox
from PyQt5.QtGui import QIcon
import json
import os

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("QToolBar 설정 저장 예제")
        self.setGeometry(100, 100, 600, 400)

        self.toolbar = QToolBar("지속성 툴바", self)
        self.addToolBar(self.toolbar)

        self.load_settings()
        self.create_toolbar()

    def create_toolbar(self):
        action1 = QAction(QIcon('icon1.png'), "작업 1", self)
        action2 = QAction(QIcon('icon2.png'), "작업 2", self)

        action1.triggered.connect(self.action1_triggered)
        action2.triggered.connect(self.action2_triggered)

        self.toolbar.addAction(action1)
        self.toolbar.addAction(action2)

    def action1_triggered(self):
        QMessageBox.information(self, "작업 1", "작업 1이 실행되었습니다.")

    def action2_triggered(self):
        QMessageBox.information(self, "작업 2", "작업 2가 실행되었습니다.")

    def closeEvent(self, event):
        self.save_settings()

    def save_settings(self):
        settings = {
            "toolbarGeometry": self.toolbar.saveGeometry().data().decode('utf-8')
        }
        with open("settings.json", "w") as file:
            json.dump(settings, file)

    def load_settings(self):
        if os.path.exists("settings.json"):
            with open("settings.json", "r") as file:
                settings = json.load(file)
                self.toolbar.restoreGeometry(settings["toolbarGeometry"])

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

위 코드는 QToolBar의 상태를 JSON 파일로 저장하고, 어플리케이션을 재시작할 때 해당 상태를 복원합니다. saveGeometryrestoreGeometry 메서드를 사용하여 툴바의 기하학적 정보를 저장합니다.

7. 요약

본 강좌에서는 PyQt를 사용하여 QToolBar를 구성하는 방법에 대해 살펴보았습니다. 기본 툴바 생성, 아이콘 추가, 기능 구현, 위치 조정, 설정 저장 등의 다양한 기능을 다루었습니다. QToolBar는 사용자 정의 UI의 중요한 요소로, 어플리케이션의 직관성과 접근성을 높일 수 있는 강력한 도구입니다. 앞으로 PyQt를 활용한 더 많은 GUI 개발에 도전하길 바랍니다.

8. 추가 자료

더 많은 정보와 예제는 아래 링크를 통해 확인할 수 있습니다: