테이블(QTableWidget)에 콤보박스(QComboBox) 추가하기Qt/PyQt5 강좌2024. 9. 1. 22:25
Table of Contents
반응형
테이블(QTableWidget)에 콤보박스(QComboBox) 추가하는 예제 코드입니다.
2024. 9. 1 최초작성
표안에 있는 콤보박스를 사용하여 가격을 선택할 수 있도록 작성된 예제입니다.
전체 코드입니다.
import sys from PyQt5.QtWidgets import QApplication, QWidget, QTableWidget, QTableWidgetItem, QVBoxLayout, QComboBox, QHeaderView, QSizePolicy from PyQt5.QtCore import Qt class ProductTable(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('상품 선택 테이블') self.setGeometry(100, 100, 600, 400) # 윈도우 크기와 위치 설정 layout = QVBoxLayout() self.table = QTableWidget() self.table.setColumnCount(4) self.table.setHorizontalHeaderLabels(['상품명', '단가', '개수', '합계']) layout.addWidget(self.table) self.products = [ {'name': '우유', 'price': 2500}, {'name': '식빵', 'price': 3000}, {'name': '계란', 'price': 5000} ] self.table.setRowCount(len(self.products) + 1) # 제품 수 + 총합계 행 for row, product in enumerate(self.products): self.table.setItem(row, 0, QTableWidgetItem(product['name'])) price_item = QTableWidgetItem(f"{product['price']}원") price_item.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter) self.table.setItem(row, 1, price_item) combo = QComboBox() combo.addItems([str(i) for i in range(11)]) # 0부터 10까지 combo.currentIndexChanged.connect(self.updateTotal) self.table.setCellWidget(row, 2, combo) sum_item = QTableWidgetItem('0원') sum_item.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter) self.table.setItem(row, 3, sum_item) # 총합계 행 추가 self.table.setItem(len(self.products), 0, QTableWidgetItem('총합계')) total_sum_item = QTableWidgetItem('0원') total_sum_item.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter) self.table.setItem(len(self.products), 3, total_sum_item) self.setLayout(layout) # 테이블 헤더 스타일 설정 header = self.table.horizontalHeader() header.setStyleSheet("QHeaderView::section { background-color: lightblue; }") # 열 너비 설정 self.table.horizontalHeader().setSectionResizeMode(0, QHeaderView.Stretch) # 상품명 self.table.setColumnWidth(1, 100) # 단가 self.table.setColumnWidth(2, 100) # 개수 self.table.setColumnWidth(3, 150) # 합계 # 테이블 크기 정책 설정 self.table.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) # 행 높이 설정 for row in range(self.table.rowCount()): self.table.setRowHeight(row, 30) def updateTotal(self): total = 0 for row in range(len(self.products)): price = int(self.table.item(row, 1).text().replace('원', '').replace(',', '')) quantity = int(self.table.cellWidget(row, 2).currentText()) subtotal = price * quantity sum_item = QTableWidgetItem(f"{subtotal:,}원") # 천 단위 구분기호 추가 sum_item.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter) self.table.setItem(row, 3, sum_item) total += subtotal # 총합계 업데이트 total_sum_item = QTableWidgetItem(f"{total:,}원") # 천 단위 구분기호 추가 total_sum_item.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter) self.table.setItem(len(self.products), 3, total_sum_item) if __name__ == '__main__': app = QApplication(sys.argv) ex = ProductTable() ex.show() sys.exit(app.exec_()) |
반응형
'Qt > PyQt5 강좌' 카테고리의 다른 글
QTableWidget의 컬럼 너비(크기)를 수동으로 조정하기 (1) | 2024.09.03 |
---|---|
PyQt5 라벨 사용 예제 - QLabel, QFont, StyleSheet (4) | 2024.09.02 |
프로그레스 바(QProgressBar)를 제어하는 간단한 PyQt5 예제 (0) | 2024.08.31 |
PyQt5 그룹박스(QGroupBox) 예제 (0) | 2024.08.31 |
PyQt5에서 QTableWidget를 마우스로 클릭하여 선택되는 것 방지 (2) | 2024.08.29 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
@webnautes :: 멈춤보단 천천히라도
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!