탭 재생성 시 이전 선택 탭 복원하는 pyQt5 예제Qt/PyQt5 강좌2024. 8. 23. 22:20
Table of Contents
반응형
탭 재생성 시 이전 선택 탭 복원하는 pyQt5 예제입니다.
2024. 8. 21 최초작성
3개의 탭이 생성되고 탭별로 텍스트가 추가됩니다. 탭 2를 선택한 상태에서 버튼을 클릭합니다.
탭을 모두 삭제후, 다시 탭을 생성한 후, 앞에서 선택했던 탭2를 다시 보여줍니다.
전체코드입니다.
import sys from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QTabWidget, QTextEdit, QSplitter from PyQt5.QtCore import Qt class TabDemo(QWidget): def __init__(self): super().__init__() self.tabWidget = None self.logTextEdit = None self.initUI() def initUI(self): # 메인 레이아웃 mainLayout = QVBoxLayout() # 스플리터 생성 splitter = QSplitter(Qt.Vertical) # 상단 위젯 (탭과 버튼) topWidget = QWidget() topLayout = QVBoxLayout(topWidget) # 탭 위젯 생성 self.tabWidget = QTabWidget() # 탭 재생성 버튼 recreateButton = QPushButton("탭 재생성") recreateButton.clicked.connect(self.recreateTabs) topLayout.addWidget(self.tabWidget) topLayout.addWidget(recreateButton) # 하단 위젯 (로그) self.logTextEdit = QTextEdit() self.logTextEdit.setReadOnly(True) # 스플리터에 위젯 추가 splitter.addWidget(topWidget) splitter.addWidget(self.logTextEdit) # 메인 레이아웃에 스플리터 추가 mainLayout.addWidget(splitter) self.setLayout(mainLayout) self.setGeometry(300, 300, 600, 400) self.setWindowTitle('Tab Widget Demo with Logging') # 초기 3개의 탭 추가 self.addInitialTabs() self.log("프로그램이 시작되었습니다.") def addInitialTabs(self): for i in range(3): textEdit = QTextEdit() textEdit.setPlainText(f"탭 {i+1}의 초기 내용") self.tabWidget.addTab(textEdit, f"탭 {i+1}") self.log("3개의 초기 탭이 생성되었습니다.") def recreateTabs(self): currentIndex = self.tabWidget.currentIndex() self.log(f"탭 재생성 시작. 현재 선택된 탭: {currentIndex + 1}") tabContents = [] # 현재 탭 내용 저장 for i in range(self.tabWidget.count()): tabContents.append(self.tabWidget.widget(i).toPlainText()) self.log(f"탭 {i+1}의 내용을 저장했습니다.") # 모든 탭 제거 while self.tabWidget.count() > 0: self.tabWidget.removeTab(0) self.log("모든 탭이 제거되었습니다.") # 탭 재생성 for i, content in enumerate(tabContents): textEdit = QTextEdit() textEdit.setPlainText(content) self.tabWidget.addTab(textEdit, f"탭 {i+1}") self.log(f"탭 {i+1}이 재생성되었습니다.") # 이전에 선택된 탭으로 이동 self.tabWidget.setCurrentIndex(currentIndex) self.log(f"이전에 선택된 탭 {currentIndex + 1}로 이동했습니다.") def addTextToCurrent(self, text): currentIndex = self.tabWidget.currentIndex() if currentIndex != -1: currentTab = self.tabWidget.widget(currentIndex) currentTab.append(text) self.log(f"탭 {currentIndex + 1}에 텍스트가 추가되었습니다: {text}") def log(self, message): if self.logTextEdit: self.logTextEdit.append(message) if __name__ == '__main__': app = QApplication(sys.argv) demo = TabDemo() # 각 탭에 문자열 추가 demo.addTextToCurrent("탭 1에 추가된 문자열") demo.tabWidget.setCurrentIndex(1) # 두번째 탭으로 이동 demo.addTextToCurrent("탭 2에 추가된 문자열") demo.tabWidget.setCurrentIndex(2) # 세번째 탭으로 이동 demo.addTextToCurrent("탭 3에 추가된 문자열") demo.show() sys.exit(app.exec_()) |
반응형
'Qt > PyQt5 강좌' 카테고리의 다른 글
PyQt5 그룹박스(QGroupBox) 예제 (0) | 2024.08.31 |
---|---|
PyQt5에서 QTableWidget를 마우스로 클릭하여 선택되는 것 방지 (2) | 2024.08.29 |
pyQt5로 만든 이미지 뷰어 (0) | 2024.08.21 |
pyQt5 윈도우를 화면의 중앙에 배치하기 (0) | 2024.08.19 |
pyQt5 QSlider 예제 (0) | 2024.08.19 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
@webnautes :: 멈춤보단 천천히라도
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!