본문 바로가기

Python

PySide6 에서 Tab 구현하기 (ChatGPT를 이용하여)

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

 

위의 코드를 실행하면 아래와 같은 윈도우가 실행될 것이다. 

Tab 예제코드 실행결과

 

쳇지피티를 이용하여 간단하게 얻은 코드이지만 윈도우 창이 실행되고, 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 이 없다고 나온다. 

다시 쳇지피티에게 물어보자. 

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())

실행결과!! 오. 탭에 아이콘이 생겼다.

 

오, 진짜 탭에 아이콘이 생겼다. 

이로서 조~금 더 이쁜 화면을 만들 수 있겠다. 

 

오늘은 여기까지!