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. 코드 설명
- 타이틀바 숨기기
setWindowFlags(Qt.FramelessWindowHint)
를 사용하여 기본 타이틀 바를 숨깁니다.
- 커스텀 타이틀 바 생성
create_title_bar
메서드에서 커스텀 타이틀 바를 생성합니다.QHBoxLayout
을 사용하여 타이틀 바의 레이아웃을 설정하고, 닫기 버튼을 추가합니다.
- 윈도우 이동
mousePressEvent
와mouseMoveEvent
를 오버라이드하여 윈도우를 드래그하여 이동할 수 있도록 합니다.mousePressEvent
에서는 마우스를 누를 때의 위치를 저장하고,mouseMoveEvent
에서는 마우스를 드래그할 때 윈도우의 위치를 업데이트합니다.
- 메인 레이아웃 설정
main_layout
에 커스텀 타이틀 바와 콘텐츠 영역을 추가합니다.setCentralWidget
을 사용하여 레이아웃을 중앙 위젯으로 설정합니다.
4. 실행 방법
위 코드를 실행하면 기본 타이틀 바가 숨겨지고, 커스텀 타이틀 바를 가진 PyQt 윈도우가 나타납니다. 닫기 버튼과 드래그 이동 기능이 포함되어 있어 사용자 경험을 개선할 수 있습니다.
결론
이번 포스트에서는 PyQt 윈도우의 기본 타이틀 바를 없애고, 커스텀 타이틀 바를 만드는 방법을 알아보았습니다. 커스텀 타이틀 바를 통해 더 세련되고 일관된 사용자 인터페이스를 제공할 수 있습니다. 여러분의 PyQt 프로젝트에 적용해보세요!