PyQt5: 제목표시줄 스타일 바꾸기 1. GUI 구성
반응형
방법
모종의 편법입니다. FramelessWindowHint
를 GUI의 플래그로 줘서 아예 프레임과 제목표시줄을 제거한 뒤 제목표시줄의 기능을 하는 위젯을 배치하는 방식입니다. 여기서는 배치만 다루고 다음에 제목표시줄로 작동하기 위한 기능들을 구현하도록 하겠습니다.
스크립트
"""윈도우 타이틀 꾸미기
https://soma0sd.tistory.com/
"""
import sys
from PyQt5 import QtWidgets, QtCore
class MainWindow(QtWidgets.QWidget):
"""메인 윈도우"""
qss = """
QWidget {
color: #000000;
background: #666;
}
QWidget#windowTitle {
color: #FFFFFF;
background: #333;
}
QWidget#windowTitle QLabel {
color: #FFFFFF;
background: #333;
}
"""
def __init__(self, parent=None):
super().__init__(parent)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
self.setStyleSheet(self.qss)
# 레이아웃과 타이틀바 위젯 생성
window_vbox = QtWidgets.QVBoxLayout(self)
window_vbox.setContentsMargins(0, 0, 0, 0)
titlebar_widget = QtWidgets.QWidget()
titlebar_widget.setObjectName("windowTitle")
title_hbox = QtWidgets.QHBoxLayout(titlebar_widget)
content_vbox = QtWidgets.QVBoxLayout()
content_vbox.setContentsMargins(3, 3, 3, 3)
# 타이틀바와 컨텐츠 박스 안의 내용물을 생성
title_label = QtWidgets.QLabel("윈도우 이름")
content_textedit = QtWidgets.QTextEdit()
# 각 항목을 레이아웃에 배치
title_hbox.addWidget(title_label)
content_vbox.addWidget(content_textedit)
window_vbox.addWidget(titlebar_widget)
window_vbox.addLayout(content_vbox)
if __name__ == "__main__":
APP = QtWidgets.QApplication(sys.argv)
WINDOW = MainWindow()
WINDOW.show()
APP.exec()
설명
Qt 스타일시트
MainWindow
클래스에 qss
에는 Qt 스타일시트가 들어있습니다. HTML의 스타일시트 언어인 CSS와 유사한 문법을 가지고 있습니다. #
문자로 고유한 요소의 스타일을 지정할 수 있는데, 해당 요소에 .setObjectName("이름")
내부함수를 사용해 GUI 전체를 통틀어 유일한 이름을 지정한 후 사용할 수 있습니다.
윈도우 플래그
위젯에 setWindowFlags(Qt 힌트)
에 FramelessWindowHint
옵션을 줘서 프레임과 제목표시줄을 제거했습니다. 다양한 힌트를 사용하여 창의 스타일을 바꿀 수 있습니다.
레이아웃 구성
기능이 많고 디자인에 신경쓸수록 레이아웃 구조는 복잡해집니다. 요소간의 포함관계와 배치순서를 헷갈리지 않도록 별도로 정리하는 것을 권합니다.
반응형
'프로그래밍 > 파이썬' 카테고리의 다른 글
PyQt5: 표 위젯 (0) | 2019.06.10 |
---|---|
PyQt5: 제목표시줄 스타일 바꾸기 2. 제목표시줄 기능 (1) | 2019.06.09 |
PyQt5: 기본적인 위젯 만들기 (0) | 2019.06.07 |
Python: VSCODE의 tasks.json를 이용한 프로젝트 감시 (0) | 2019.04.24 |
Python: 구글 번역사 도구로 JSON 번역하기 (0) | 2019.04.05 |
댓글