일단 커밋. 오랫동안 커밋을 안해서 꼬였다.

리팩토리 중.
This commit is contained in:
2025-11-15 15:59:49 +09:00
parent 5a47b792d6
commit d79c10b975
12909 changed files with 2070539 additions and 285 deletions

View File

@@ -1,14 +1,17 @@
import sys
import os
import shutil
import sys
import UtilPack as util
import VWorldAPIs as vw
import ExtEXIFData as exif
import MgrUtilityPoleConverter as mgrConv
from PyQt5.QtCore import Qt, QUrl
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QPushButton, QVBoxLayout, QLineEdit, QHBoxLayout, QListWidget, QTableWidget, QRadioButton, QLabel, QFileDialog, QListWidgetItem
from PyQt5.QtGui import QPixmap, QTransform
from PyQt5.QtCore import Qt, QSettings, QRect
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QPushButton, QVBoxLayout, QLineEdit, \
QHBoxLayout, QTableWidget, QTableWidgetItem, QAbstractItemView, QHeaderView, QFileDialog, \
QListWidget, QListWidgetItem, QMessageBox
from PyQt5.QtGui import QResizeEvent, QCloseEvent, QColor
QApplication.setAttribute(Qt.AA_ShareOpenGLContexts)
class MyApp(QMainWindow):
@@ -16,134 +19,10 @@ class MyApp(QMainWindow):
super().__init__()
self.initUI()
self.loadINI()
self.initDB()
#
def closeEvent(self, a0: 'QCloseEvent | None'):
filenameLog = f"{util.GetCurrentTime()}_DbgLog.txt"
pathDbgLog = os.path.join( self.pathLog, filenameLog)
util.SaveDbgMessages(pathDbgLog)
self.saveINI()
super().closeEvent(a0)
#
def resizeEvent(self, a0: 'QResizeEvent | None'):
pass
#
def loadINI(self):
pass
#
def saveINI(self):
pass
#
def initDB(self):
pass
#
def MakeUI_Left(self):
layout = QVBoxLayout()
layout_top = QHBoxLayout()
self.listWidget_Folders = QListWidget()
self.listWidget_Folders.setFixedHeight(100)
layout_Btns = QVBoxLayout()
btn_FolderAdd = QPushButton("폴더 추가")
btn_FolderAdd.clicked.connect(self.on_btnFolderAdd_clicked)
btn_FolderDel = QPushButton("폴더 삭제")
btn_FolderDel.clicked.connect(self.on_btnFolderDel_clicked)
btn_FolderParss = QPushButton("폴더 파싱")
btn_FolderParss.clicked.connect(self.on_btnFolderParse_clicked)
layout_Btns.addWidget(btn_FolderAdd)
layout_Btns.addWidget(btn_FolderDel)
layout_Btns.addWidget(btn_FolderParss)
def closeEvent(self, event):
event.accept()
layout_top.addWidget(self.listWidget_Folders)
layout_top.addLayout(layout_Btns)
self.tableWidget_Src = QTableWidget()
self.tableWidget_Src.verticalHeader().setVisible(False)
self.tableWidget_Src.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.tableWidget_Src.setSortingEnabled(True)
self.tableWidget_Src.setColumnCount(5)
self.tableWidget_Src.setHorizontalHeaderLabels(["Path", "Title", "H.ID", "Img Cnt", "Dw Cnt"])
self.tableWidget_Src.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.tableWidget_Src.horizontalHeader().sectionClicked.connect(self.on_tableWidget_Src_headerClicked)
self.tableWidget_Src.setSelectionBehavior(QAbstractItemView.SelectRows)
self.tableWidget_Src.setSelectionMode(QAbstractItemView.SingleSelection)
self.tableWidget_Src.itemSelectionChanged.connect(self.on_tableWidget_Src_itemSelectionChanged)
layout.addLayout(layout_top)
layout.addWidget(self.tableWidget_Src)
return layout
#
def MakeUI_Center(self):
layout = QVBoxLayout()
btn_Emptyfolder = QPushButton("빈 폴더 이동")
btn_Emptyfolder.clicked.connect(self.on_btn_Emptyfolder_clicked)
btn_ChkDuplicate = QPushButton("중복 검사 및 제거")
btn_ChkDuplicate.clicked.connect(self.on_btn_ChkDuplicate_clicked)
btn_Archive = QPushButton("압축 및 데이터 저장")
btn_Archive.clicked.connect(self.on_btn_Archive_clicked)
btn_EnterCalibre = QPushButton("컬리버에 삽입")
btn_EnterCalibre.clicked.connect(self.on_btn_EnterCalibre_clicked)
layout.addWidget(btn_Emptyfolder)
layout.addWidget(btn_ChkDuplicate)
layout.addWidget(btn_Archive)
layout.addWidget(btn_EnterCalibre)
return layout
#
def MakeUI_Right(self):
layout_top = QHBoxLayout()
self.edit_DB = QLineEdit(self)
self.edit_DB.setReadOnly(True)
self.edit_DB.setText("...")
btn_DB = QPushButton("...")
btn_DB.setFixedWidth(50)
btn_DB.clicked.connect(self.on_btnDB_clicked)
layout_top.addWidget(self.edit_DB)
layout_top.addWidget(btn_DB)
self.tableWidget_DB = QTableWidget()
self.tableWidget_DB.verticalHeader().setVisible(False)
self.tableWidget_DB.setColumnCount(5)
self.tableWidget_DB.setHorizontalHeaderLabels(["Title", "Author", "Cover", "Exts", "ID"])
self.tableWidget_DB.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.tableWidget_DB.setSelectionBehavior(QAbstractItemView.SelectRows)
self.tableWidget_DB.setSelectionMode(QAbstractItemView.SingleSelection)
self.tableWidget_DB.itemSelectionChanged.connect(self.on_tableWidget_DB_itemSelectionChanged)
layout = QVBoxLayout()
layout.addLayout(layout_top)
layout.addWidget(self.tableWidget_DB)
return layout
#
def MakeUI(self):
layout_L = self.MakeUI_Left()
layout_C = self.MakeUI_Center()
layout_R = self.MakeUI_Right()
# 레이아웃 설정
layout = QHBoxLayout()
layout.addLayout(layout_L, stretch = 10)
layout.addLayout(layout_C, stretch = 1)
layout.addLayout(layout_R, stretch = 10)
return layout
#
def initUI(self):
layout = self.MakeUI()
@@ -151,17 +30,178 @@ class MyApp(QMainWindow):
central_widget = QWidget()
central_widget.setLayout(layout)
self.setCentralWidget(central_widget)
self.setWindowTitle('Manga Database')
self.resize(800, 600)
self.setWindowTitle('Poles Database')
self.move(100, 300)
self.show()
# 테이블의 특정 행에 배경색을 설정한다
# nRow: 배경색을 설정할 행 번호, color: 배경색 (Qt.GlobalColor)
def SrcTableRowBgColor(self, nRow:int, color:Qt.GlobalColor) -> None:
for col in range(self.tableWidget_Src.columnCount()):
item = self.tableWidget_Src.item(nRow, col)
if item:
item.setBackground(Qt.GlobalColor(color))
def loadINI(self):
print("Load INI")
def saveINI(self):
print("Save INI")
def MakeUI_Left_Top(self):
label_SrcPath = QLabel("Source Path")
self.edit_SrcPath = QLineEdit("", self)
self.edit_SrcPath.setReadOnly(True)
btn_SrcPath_OK = QPushButton("...", self)
btn_SrcPath_OK.clicked.connect(self.on_click_SourcePath)
self.edit_SrcPath.setEnabled(False)
btn_SrcPath_OK.setEnabled(False)
layout01 = QHBoxLayout()
layout01.addWidget(label_SrcPath)
layout01.addWidget(self.edit_SrcPath)
layout01.addWidget(btn_SrcPath_OK)
label_ImgPath = QLabel("Image Path")
self.edit_ImgPath = QLineEdit("", self)
self.edit_ImgPath.setReadOnly(True)
btn_ImgPath_OK = QPushButton("...", self)
btn_ImgPath_OK.clicked.connect(self.on_click_ImagePath)
layout02 = QHBoxLayout()
layout02.addWidget(label_ImgPath)
layout02.addWidget(self.edit_ImgPath)
layout02.addWidget(btn_ImgPath_OK)
self.btn_ParseImages = QPushButton("Parse!!", self)
self.btn_ParseImages.clicked.connect(self.on_click_btn_ParseImages)
self.btn_ParseImages.setMaximumWidth(410)
layout = QVBoxLayout()
layout.addLayout(layout01)
layout.addLayout(layout02)
layout.addWidget(self.btn_ParseImages)
return layout
def MakeUI_Left_Mid(self):
# 이미지 목록
self.list_Images = QListWidget(self)
self.list_Images.itemSelectionChanged.connect(self.on_SelChanged_ImageList)
self.list_Images.setMinimumWidth(100)
self.list_Images.setMaximumWidth(200)
# 이미지 정보 테이블
self.list_Info = QListWidget(self)
self.list_Info.setMinimumWidth(100)
self.list_Info.setMaximumWidth(200)
layout_r = QVBoxLayout()
layout_r.addWidget(self.list_Info)
layout = QHBoxLayout()
layout.addWidget(self.list_Images)
layout.addLayout(layout_r)
return layout
def MakeUI_left_Down(self):
label_ExlPath = QLabel("DB(xlsx) Path")
self.edit_ExlPath = QLineEdit("", self)
self.edit_ExlPath.setReadOnly(True)
btn_ExlPath_OK = QPushButton("OK", self)
layout01 = QHBoxLayout()
layout01.addWidget(label_ExlPath)
layout01.addWidget(self.edit_ExlPath)
layout01.addWidget(btn_ExlPath_OK)
btn_Exl_Export = QPushButton("Export to EXCEL", self)
btn_Exl_Export.clicked.connect(self.on_click_btn_ExportToExcel)
layout = QVBoxLayout()
layout.addLayout(layout01)
layout.addWidget(btn_Exl_Export)
return layout
def MakeUI_Left(self):
lsyout_lefttop = self.MakeUI_Left_Top()
layout_leftmid = self.MakeUI_Left_Mid()
layout_leftDwn = self.MakeUI_left_Down()
layout = QVBoxLayout()
layout.addLayout(lsyout_lefttop)
layout.addLayout(layout_leftmid)
layout.addLayout(layout_leftDwn)
return layout
def MakeUI(self):
layout_L = self.MakeUI_Left()
# show Image in middle Layout
self.label_Image = QLabel(self)
# Load Default Image
pixmap = QPixmap("layoutImg.jpeg")
scaled_Pix = pixmap.scaledToWidth(450)
self.label_Image.setPixmap(scaled_Pix)
self.label_Image.setMaximumWidth(450)
# Show GPS Mapped map in Right Layout
self.webview_map = QWebEngineView()
self.webview_map.setFixedWidth(450)
self.webview_map.setUrl(QUrl("file:///Users/minarinari/Workspace/Python/UtilityPole_Info/sample_Event.html"))
# 레이아웃 설정
layout = QHBoxLayout()
layout.addLayout(layout_L)
layout.addWidget(self.label_Image)
layout.addWidget(self.webview_map)
return layout
def on_click_SourcePath(self):
folder_path = QFileDialog.getExistingDirectory(self, '폴더 선택', '')
self.edit_SrcPath.setText(folder_path)
def on_click_ImagePath(self):
folder_path = QFileDialog.getExistingDirectory(self, '폴더 선택', '')
self.edit_ImgPath.setText(folder_path)
def on_click_btn_ParseImages(self):
self.btn_ParseImages.setEnabled(False)
pathImage= self.edit_ImgPath.text()
mgrConv.Process(pathImage,"/home/gerd/Workspace/Python/UtilityPole_Info" )
self.btn_ParseImages.setEnabled(True)
print("Parse END!")
def on_click_btn_ExportToExcel(self):
print("Excel!!")
def on_SelChanged_ImageList(self):
items = self.list_Images.selectedItems()
for item in items:
listData = item.data(Qt.UserRole)
self.list_Info.clear()
for content in listData:
row = QListWidgetItem(content)
self.list_Info.addItem(row)
pixmap = QPixmap(listData[0])
szLabel = self.label_Image.size()
resized_pixmap = pixmap.scaled(100, 100)
rotated_pixmap = resized_pixmap.transformed(QTransform().rotate(90))
self.label_Image.setPixmap(pixmap)
# def open_image(self):
# # 이미지 파일 열기 다이얼로그
# file_name, _ = QFileDialog.getOpenFileName(self, "Open Image File", "", "Images (*.png *.xpm *.jpg)")
# if file_name:
# # QPixmap을 사용해 이미지를 QLabel에 설정
# pixmap = QPixmap(file_name)
# self.label.setPixmap(pixmap)
# self.label.setScaledContents(True)