newTao/modules/DBList.py

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