콘텐츠로 건너뛰기
» PyQt에서 기본 타이틀 바를 없애고 커스텀 타이틀 바 만들기

PyQt에서 기본 타이틀 바를 없애고 커스텀 타이틀 바 만들기

PyQt를 사용하여 애플리케이션을 개발할 때, 기본 타이틀 바 대신 커스텀 타이틀 바를 사용하면 더 멋진 사용자 인터페이스를 만들 수 있습니다. 이번 포스트에서는 PyQt 윈도우의 기본 타이틀 바를 없애고, 커스텀 타이틀 바를 만드는 방법을 알아보겠습니다. 단계별로 설명하니 따라해보세요!

1. PyQt 설치하기

먼저, PyQt5가 설치되어 있어야 합니다. 설치되지 않았다면 아래 명령어를 사용하여 설치합니다.

pip install PyQt5

2. 기본 윈도우 설정

기본 윈도우 설정을 시작하기 위해, QMainWindow를 상속받아 윈도우를 설정합니다.

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QLabel, QHBoxLayout
from PyQt5.QtCore import Qt, QPoint

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Custom Title Bar Example")
        self.setGeometry(100, 100, 800, 600)

        # 타이틀바 숨기기
        self.setWindowFlags(Qt.FramelessWindowHint)

        # 메인 레이아웃 설정
        main_layout = QVBoxLayout()
        self.title_bar = self.create_title_bar()
        content = self.create_content()

        main_layout.addWidget(self.title_bar)
        main_layout.addWidget(content)

        container = QWidget()
        container.setLayout(main_layout)
        self.setCentralWidget(container)

    def create_title_bar(self):
        title_bar = QWidget()
        title_bar.setObjectName("titleBar")
        title_bar.setStyleSheet("""
            #titleBar {
                background-color: #2B2B2B;
                color: white;
            }
        """)

        title_layout = QHBoxLayout()
        title_layout.setContentsMargins(0, 0, 0, 0)

        close_button = QPushButton("X")
        close_button.setFixedSize(30, 30)
        close_button.setStyleSheet("background-color: #FF5A5A; border: none; color: white;")
        close_button.clicked.connect(self.close)

        title_layout.addStretch()
        title_layout.addWidget(close_button)
        title_bar.setLayout(title_layout)

        # 윈도우 이동을 위해 마우스 이벤트 연결
        title_bar.mouseMoveEvent = self.mouseMoveEvent
        title_bar.mousePressEvent = self.mousePressEvent

        return title_bar

    def create_content(self):
        content = QWidget()
        layout = QVBoxLayout()

        label = QLabel("This is the content area.")
        layout.addWidget(label)

        content.setLayout(layout)
        return content

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.old_pos = event.globalPos()

    def mouseMoveEvent(self, event):
        if event.buttons() == Qt.LeftButton:
            delta = QPoint(event.globalPos() - self.old_pos)
            self.move(self.x() + delta.x(), self.y() + delta.y())
            self.old_pos = event.globalPos()

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

3. 코드 설명

  1. 타이틀바 숨기기
  • setWindowFlags(Qt.FramelessWindowHint)를 사용하여 기본 타이틀 바를 숨깁니다.
  1. 커스텀 타이틀 바 생성
  • create_title_bar 메서드에서 커스텀 타이틀 바를 생성합니다.
  • QHBoxLayout을 사용하여 타이틀 바의 레이아웃을 설정하고, 닫기 버튼을 추가합니다.
  1. 윈도우 이동
  • mousePressEventmouseMoveEvent를 오버라이드하여 윈도우를 드래그하여 이동할 수 있도록 합니다.
  • mousePressEvent에서는 마우스를 누를 때의 위치를 저장하고, mouseMoveEvent에서는 마우스를 드래그할 때 윈도우의 위치를 업데이트합니다.
  1. 메인 레이아웃 설정
  • main_layout에 커스텀 타이틀 바와 콘텐츠 영역을 추가합니다.
  • setCentralWidget을 사용하여 레이아웃을 중앙 위젯으로 설정합니다.

4. 실행 방법

위 코드를 실행하면 기본 타이틀 바가 숨겨지고, 커스텀 타이틀 바를 가진 PyQt 윈도우가 나타납니다. 닫기 버튼과 드래그 이동 기능이 포함되어 있어 사용자 경험을 개선할 수 있습니다.

결론

이번 포스트에서는 PyQt 윈도우의 기본 타이틀 바를 없애고, 커스텀 타이틀 바를 만드는 방법을 알아보았습니다. 커스텀 타이틀 바를 통해 더 세련되고 일관된 사용자 인터페이스를 제공할 수 있습니다. 여러분의 PyQt 프로젝트에 적용해보세요!