106 lines
3.6 KiB
Python
106 lines
3.6 KiB
Python
from PySide6.QtWidgets import QWidget, QVBoxLayout, QGridLayout, QLabel
|
|
from PySide6.QtGui import QPixmap
|
|
from PySide6.QtCore import Qt
|
|
import requests
|
|
|
|
|
|
class ProductCard(QWidget):
|
|
def __init__(self):
|
|
super().__init__()
|
|
# self.setFixedSize(800, 300)
|
|
|
|
|
|
# 외부 위젯으로 감싸서 테두리 적용
|
|
container_widget = QWidget(self)
|
|
container_widget.setFixedSize(600,400)
|
|
container_layout = QVBoxLayout(container_widget)
|
|
self.layout = QGridLayout()
|
|
|
|
# 테두리 스타일 적용
|
|
container_widget.setStyleSheet("border: 2px solid black;")
|
|
|
|
# UI 요소 초기화
|
|
self.info1_label = QLabel('검색 상품')
|
|
self.info1_label.setAlignment(Qt.AlignCenter)
|
|
self.info1_label.setStyleSheet("font-weight: bold; font-size: 16px;")
|
|
|
|
self.info2_label = QLabel('상품 정보')
|
|
self.info2_label.setAlignment(Qt.AlignCenter)
|
|
self.info2_label.setStyleSheet("font-weight: bold; font-size: 16px;")
|
|
|
|
self.image_label = QLabel()
|
|
# self.image_label.setFixedWidth(250)
|
|
self.image_label.setFixedSize(200, 250)
|
|
|
|
self.name_label = QLabel("상품명:")
|
|
self.name_value = QLabel("")
|
|
|
|
self.price_label = QLabel("가격:")
|
|
self.price_value = QLabel("")
|
|
|
|
self.tag_label = QLabel("태그:")
|
|
self.tag_value = QLabel("")
|
|
|
|
self.cat_label = QLabel("카테고리:")
|
|
self.cat_value = QLabel("")
|
|
|
|
# 그리드 레이아웃 구성
|
|
self.layout.addWidget(self.info1_label, 0, 0, 1, 1)
|
|
self.layout.addWidget(self.info2_label, 0, 1, 1, 4)
|
|
self.layout.addWidget(self.image_label, 1, 0, 3, 1)
|
|
|
|
# 각 정보 라벨과 값 배치
|
|
self.layout.addWidget(self.name_label, 1, 2, 1, 1)
|
|
self.layout.addWidget(self.name_value, 1, 3, 1, 1)
|
|
self.layout.addWidget(self.price_label, 2, 2, 1, 1)
|
|
self.layout.addWidget(self.price_value, 2, 3, 1, 1)
|
|
self.layout.addWidget(self.tag_label, 3, 2, 1, 1)
|
|
self.layout.addWidget(self.tag_value, 3, 3, 1, 1)
|
|
self.layout.addWidget(self.cat_label, 4, 2, 1, 1)
|
|
self.layout.addWidget(self.cat_value, 4, 3, 1, 1)
|
|
|
|
|
|
container_layout.addLayout(self.layout)
|
|
|
|
def reset(self):
|
|
"""카드의 데이터를 초기화합니다."""
|
|
self.name_value.setText("")
|
|
self.price_value.setText("")
|
|
self.tag_value.setText("")
|
|
self.cat_value.setText("")
|
|
self.image_label.clear()
|
|
|
|
def set_data(self, name, price, tag, cat, product_img_path):
|
|
"""카드에 상품 데이터를 설정합니다."""
|
|
self.name_value.setText(name)
|
|
# self.price_value.setText(str(price))
|
|
self.price_value.setText(f"{price:,}원")
|
|
|
|
self.tag_value.setText(tag)
|
|
self.cat_value.setText(cat)
|
|
# self.price_value.setText(str(price))
|
|
|
|
|
|
pixmap = QPixmap(product_img_path)
|
|
self.image_label.setPixmap(pixmap.scaled(self.image_label.size(), Qt.KeepAspectRatio))
|
|
|
|
|
|
# # 이미지 설정
|
|
# pixmap = QPixmap()
|
|
# img_data = self.download_image_data(img_url)
|
|
# if img_data:
|
|
# pixmap.loadFromData(img_data)
|
|
# self.image_label.setPixmap(pixmap.scaled(self.image_label.size(), Qt.KeepAspectRatio))
|
|
# else:
|
|
# self.image_label.clear()
|
|
|
|
def download_image_data(self, img_url):
|
|
"""이미지 URL에서 데이터를 다운로드합니다."""
|
|
try:
|
|
response = requests.get(img_url)
|
|
if response.status_code == 200:
|
|
return response.content
|
|
except Exception as e:
|
|
print(f"Image download error: {e}")
|
|
return None
|