114 lines
4.2 KiB
Python
114 lines
4.2 KiB
Python
from PyQt5.QtWidgets import QDialog, QVBoxLayout, QHBoxLayout, QComboBox, QListWidget, QAbstractItemView, QPushButton, QMessageBox
|
|
from PyQt5.QtCore import Qt
|
|
from datetime import datetime
|
|
|
|
|
|
class DbDialog(QDialog):
|
|
def __init__(self, mydb):
|
|
super().__init__()
|
|
|
|
self.mydb = mydb
|
|
print(f"class DbDialog 현재 DB상태 : {self.mydb}")
|
|
|
|
|
|
self.setWindowTitle("DB 목록 선택")
|
|
self.setFixedSize(400, 600)
|
|
|
|
# Dialog 레이아웃 설정
|
|
dialog_layout = QVBoxLayout()
|
|
self.setLayout(dialog_layout)
|
|
|
|
# 년도 선택 콤보박스
|
|
self.year_combo = QComboBox()
|
|
self.year_combo.addItems(self.get_years())
|
|
self.year_combo.setCurrentText(str(datetime.now().year))
|
|
self.year_combo.setFixedSize(100, 50)
|
|
dialog_layout.addWidget(self.year_combo)
|
|
|
|
# 월 선택 콤보박스
|
|
self.month_combo = QComboBox()
|
|
self.month_combo.addItems(self.get_months())
|
|
self.month_combo.setCurrentText(str(datetime.now().month))
|
|
self.month_combo.setFixedSize(100, 50)
|
|
dialog_layout.addWidget(self.month_combo)
|
|
|
|
# DB 목록 리스트
|
|
self.db_index_list = QListWidget()
|
|
self.db_index_list.setSelectionMode(QAbstractItemView.SingleSelection)
|
|
self.db_index_list.setFixedSize(350, 450)
|
|
dialog_layout.addWidget(self.db_index_list)
|
|
self.db_index_list.itemDoubleClicked.connect(self.on_confirm_clicked)
|
|
|
|
# 확인 버튼
|
|
self.confirm_btn = QPushButton("확인")
|
|
self.confirm_btn.setFixedSize(100, 50)
|
|
self.confirm_btn.clicked.connect(self.on_confirm_clicked)
|
|
dialog_layout.addWidget(self.confirm_btn, alignment=Qt.AlignRight)
|
|
|
|
# 콤보박스 선택 시 목록 업데이트
|
|
self.year_combo.currentIndexChanged.connect(self.update_db_list)
|
|
self.month_combo.currentIndexChanged.connect(self.update_db_list)
|
|
|
|
# 초기 목록 업데이트
|
|
self.update_db_list()
|
|
|
|
def get_years(self):
|
|
years = []
|
|
for doc in self.mydb.keywords_index.distinct("year", {}):
|
|
years.append(doc)
|
|
return years
|
|
|
|
def get_months(self):
|
|
# 월 목록 (1~12)
|
|
return [str(i) for i in range(1, 13)]
|
|
|
|
def update_db_list(self):
|
|
# 선택된 년도와 월에 해당하는 filename 목록 가져오기
|
|
selected_year = self.year_combo.currentText()
|
|
selected_month = self.month_combo.currentText()
|
|
filter_query = {"year": selected_year, "month": selected_month}
|
|
filenames = [doc["filename"] for doc in self.mydb.keywords_index.find(filter_query, {})]
|
|
|
|
# 목록 위젯에 filename 목록 표시
|
|
self.db_index_list.clear()
|
|
self.db_index_list.addItems(filenames)
|
|
|
|
def on_confirm_clicked(self):
|
|
# 선택된 아이템 확인
|
|
selected_items = self.db_index_list.selectedItems()
|
|
|
|
# 선택된 아이템 정보 출력
|
|
for item in selected_items:
|
|
print(f"아이템 텍스트: {item.text()}")
|
|
# print(f"아이템 데이터: {item.data(Qt.UserRole)}")
|
|
|
|
if not self.db_index_list.selectedItems():
|
|
QMessageBox.information(self, "알림", "목록을 선택해주세요.")
|
|
return None
|
|
|
|
# 선택된 아이템의 filename 추출
|
|
selected_item = selected_items[0]
|
|
filename = selected_item.text()
|
|
|
|
# keyword_ids 목록 반환
|
|
try:
|
|
# filename을 기준으로 keyword_ids만 검색
|
|
result = self.mydb.keywords_index.find_one({"filename": filename}, {"keyword_ids": 1})
|
|
if result:
|
|
self.selected_keyword_data = result['keyword_ids']
|
|
print(f"DBList 내 self.selected_keyword_data : {self.selected_keyword_data}")
|
|
self.accept()
|
|
|
|
# print(f"result : {result}")
|
|
# return result
|
|
else:
|
|
raise ValueError(f"데이터베이스에서 {filename}에 해당하는 데이터를 찾을 수 없습니다.")
|
|
|
|
|
|
except Exception as e:
|
|
# 예외 발생 시 에러 메시지 출력
|
|
QMessageBox.warning(self, "에러", f"{e}")
|
|
# return None
|
|
|
|
|
|
|