GUI 프로그램에서 화면의 공간은 작은데, 많은 정보를 담고 있을 때는 Tab 을 이용하여 보여주면 좋다.
PySide6 에서는 어떻게 Tab 을 구현할 수 있는 지 보자.
먼저 쳇지피티에게 간단히 물어보자.
그리고 아래와 같은 예제코드를 보여준다.
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QLabel, QTabWidget
import sys
class MyTabWidget(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("PySide6 Tab Widget Example")
self.setGeometry(100, 100, 400, 300)
# QTabWidget 생성
self.tab_widget = QTabWidget()
# 탭 추가
self.tab1 = self.create_tab("첫 번째 탭", "이곳은 첫 번째 탭입니다.")
self.tab2 = self.create_tab("두 번째 탭", "이곳은 두 번째 탭입니다.")
self.tab_widget.addTab(self.tab1, "탭 1")
self.tab_widget.addTab(self.tab2, "탭 2")
self.setCentralWidget(self.tab_widget)
def create_tab(self, title, content):
"""탭을 생성하는 헬퍼 함수"""
tab = QWidget()
layout = QVBoxLayout()
label = QLabel(content)
layout.addWidget(label)
tab.setLayout(layout)
return tab
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MyTabWidget()
window.show()
sys.exit(app.exec())
자, 코드를 얻었으니 한번 실행해보자. 쳇지피티도 완벽하지 않아서 실제로 동작안하는 경우도 많다.
파이썬 환경에서 해당 코드를 실행해보자.
No moudle named 'PySide6' 라고 나온다면 PySide6가 설치되지 않아서 그런 것이다.
아래 명령어로 PySide6를 설치해주자.
pip install PySide6
위의 코드를 실행하면 아래와 같은 윈도우가 실행될 것이다.
쳇지피티를 이용하여 간단하게 얻은 코드이지만 윈도우 창이 실행되고, 2개의 탭이 있는 것을 확인할 수 있다.
굿굿!
자 여기서 스톱하면 재미가 없으니, 조금 더 진행해보자.
쳇지피티가 아래와 같은 추가 기능 아이디어를 알려줬다. 기특한 것.
여기서 3번째 아이콘 추가 기능이 좀 끌린다.
밋밋한 탭 보다는 심플한 아이콘이 들어있다면 더 좋을 것 같다.
그래, 탭에 아이콘을 넣어보자.
코드에서 이 부분을...
self.tab_widget.addTab(self.tab1, "탭 1")
self.tab_widget.addTab(self.tab2, "탭 2")
아래처럼 고쳐주자.
self.tab_widget.addTab(self.tab1, QIcon("icon.png"), "탭 1")
self.tab_widget.addTab(self.tab2, QIcon("icon.png"), "탭 2")
엉? 에러가 발생하는데? QIcon 이 없다고 나온다.
다시 쳇지피티에게 물어보자.
수정된 코드를 알려주었다. 그러면서 주의점도 알려주었다.
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QLabel, QTabWidget
from PySide6.QtGui import QIcon # QIcon 추가
import sys
class MyTabWidget(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("PySide6 Tab Widget Example")
self.setGeometry(100, 100, 400, 300)
self.tab_widget = QTabWidget()
# 아이콘 설정 (아이콘 파일이 있어야 합니다!)
icon1 = QIcon("icon1.png") # 실제 아이콘 경로로 변경
icon2 = QIcon("icon2.png")
# 탭 추가
self.tab1 = self.create_tab("첫 번째 탭", "이곳은 첫 번째 탭입니다.")
self.tab2 = self.create_tab("두 번째 탭", "이곳은 두 번째 탭입니다.")
self.tab_widget.addTab(self.tab1, icon1, "탭 1")
self.tab_widget.addTab(self.tab2, icon2, "탭 2")
self.setCentralWidget(self.tab_widget)
def create_tab(self, title, content):
tab = QWidget()
layout = QVBoxLayout()
label = QLabel(content)
layout.addWidget(label)
tab.setLayout(layout)
return tab
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MyTabWidget()
window.show()
sys.exit(app.exec())
실제 아이콘이 경로에 있어야 한다고 알려준다.
문제는.. 나는 아이콘 파일이 없다.
잠깐.. 가만히 읽어보니, 예제용 아이콘이 필요하면... 리소스 파일을 사용할 수도 있다고 한다.
응? 예제용 아이콘? 한번 더 확인해보자.
앞에서는 예제용 아이콘이 있다고 하고, 다시 물어보니 없다고 하는군.
하지만 대신 기본 아이콘을 가져오는 방법을 알려준다.
한번 더 믿는 셈 치고, 새로운 코드를 동작시켜 보자.
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QLabel, QTabWidget
from PySide6.QtGui import QIcon
from PySide6.QtWidgets import QStyle
import sys
class MyTabWidget(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QStyle 기본 아이콘 예제")
self.setGeometry(100, 100, 400, 300)
self.tab_widget = QTabWidget()
# 기본 시스템 아이콘 가져오기
file_icon = QApplication.style().standardIcon(QStyle.SP_FileIcon)
warning_icon = QApplication.style().standardIcon(QStyle.SP_MessageBoxWarning)
# 탭 추가
self.tab1 = self.create_tab("파일 탭", "이곳은 파일 관련 탭입니다.")
self.tab2 = self.create_tab("경고 탭", "이곳은 경고 관련 탭입니다.")
self.tab_widget.addTab(self.tab1, file_icon, "파일")
self.tab_widget.addTab(self.tab2, warning_icon, "경고")
self.setCentralWidget(self.tab_widget)
def create_tab(self, title, content):
tab = QWidget()
layout = QVBoxLayout()
label = QLabel(content)
layout.addWidget(label)
tab.setLayout(layout)
return tab
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MyTabWidget()
window.show()
sys.exit(app.exec())
오, 진짜 탭에 아이콘이 생겼다.
이로서 조~금 더 이쁜 화면을 만들 수 있겠다.
오늘은 여기까지!
'Python' 카테고리의 다른 글
Protobuf 를 쉽게 사용해보자 (1/2) (0) | 2025.03.08 |
---|---|
파이썬 리스트 깊은 복사(deep copy) vs 얕은 복사(shallow copy) (1) | 2025.03.05 |
파이썬 리스트 복사(list copy) (0) | 2025.03.04 |
간단한 설정파일을 직접 만들어서 사용해보자 (0) | 2025.03.01 |
캡쳐한 그림으로 binary parsing 을 해보자 (0) | 2025.02.28 |