first commit
This commit is contained in:
commit
22804577f4
|
|
@ -0,0 +1,20 @@
|
|||
__pycache__/
|
||||
dist/
|
||||
build/
|
||||
Lib/
|
||||
Scripts/
|
||||
*.db_save_images/
|
||||
*.db_tao_save_images/
|
||||
*.pyc
|
||||
*.db
|
||||
*.pkl
|
||||
*.log
|
||||
*.zip
|
||||
*.log.*
|
||||
*.xlsx
|
||||
pyvenv.cfg
|
||||
!base.db
|
||||
!baseXLS.xlsx
|
||||
!baseXLS_backup.xlsx
|
||||
!baseXLS_Percenty.xlsx
|
||||
!test*.xlsx
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,756 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
################################################################################
|
||||
## Form generated from reading UI file 'MainTao.ui'
|
||||
##
|
||||
## Created by: Qt User Interface Compiler version 6.6.1
|
||||
##
|
||||
## WARNING! All changes made in this file will be lost when recompiling UI file!
|
||||
################################################################################
|
||||
|
||||
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
|
||||
QMetaObject, QObject, QPoint, QRect,
|
||||
QSize, QTime, QUrl, Qt)
|
||||
from PySide6.QtGui import (QAction, QBrush, QColor, QConicalGradient,
|
||||
QCursor, QFont, QFontDatabase, QGradient,
|
||||
QIcon, QImage, QKeySequence, QLinearGradient,
|
||||
QPainter, QPalette, QPixmap, QRadialGradient,
|
||||
QTransform)
|
||||
from PySide6.QtWebEngineWidgets import QWebEngineView
|
||||
from PySide6.QtWidgets import (QAbstractButton, QAbstractSpinBox, QApplication, QComboBox,
|
||||
QDialogButtonBox, QGraphicsView, QGroupBox, QHBoxLayout,
|
||||
QHeaderView, QLabel, QLineEdit, QMainWindow,
|
||||
QMenu, QMenuBar, QProgressBar, QPushButton,
|
||||
QSizePolicy, QSpinBox, QStatusBar, QTabWidget,
|
||||
QTableView, QVBoxLayout, QWidget)
|
||||
|
||||
class Ui_MainWindow(object):
|
||||
def setupUi(self, MainWindow):
|
||||
if not MainWindow.objectName():
|
||||
MainWindow.setObjectName(u"MainWindow")
|
||||
MainWindow.resize(1902, 1036)
|
||||
self.centralwidget = QWidget(MainWindow)
|
||||
self.centralwidget.setObjectName(u"centralwidget")
|
||||
self.horizontalLayoutWidget = QWidget(self.centralwidget)
|
||||
self.horizontalLayoutWidget.setObjectName(u"horizontalLayoutWidget")
|
||||
self.horizontalLayoutWidget.setGeometry(QRect(10, 10, 511, 51))
|
||||
self.horizontalLayout = QHBoxLayout(self.horizontalLayoutWidget)
|
||||
self.horizontalLayout.setObjectName(u"horizontalLayout")
|
||||
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
|
||||
self.groupBox = QGroupBox(self.horizontalLayoutWidget)
|
||||
self.groupBox.setObjectName(u"groupBox")
|
||||
self.matchCount_2 = QLabel(self.groupBox)
|
||||
self.matchCount_2.setObjectName(u"matchCount_2")
|
||||
self.matchCount_2.setGeometry(QRect(130, 10, 31, 31))
|
||||
self.timerStart = QPushButton(self.groupBox)
|
||||
self.timerStart.setObjectName(u"timerStart")
|
||||
self.timerStart.setGeometry(QRect(10, 10, 61, 31))
|
||||
self.timerStart.setCheckable(False)
|
||||
self.timerStart.setAutoDefault(True)
|
||||
self.timerStart.setFlat(False)
|
||||
self.timerStop = QPushButton(self.groupBox)
|
||||
self.timerStop.setObjectName(u"timerStop")
|
||||
self.timerStop.setGeometry(QRect(270, 10, 51, 31))
|
||||
self.timerStop.setCheckable(False)
|
||||
self.timerStop.setAutoDefault(True)
|
||||
self.timerStop.setFlat(False)
|
||||
self.timerSecond = QLineEdit(self.groupBox)
|
||||
self.timerSecond.setObjectName(u"timerSecond")
|
||||
self.timerSecond.setGeometry(QRect(150, 10, 31, 31))
|
||||
self.timerSecond.setAlignment(Qt.AlignCenter)
|
||||
self.matchCount_3 = QLabel(self.groupBox)
|
||||
self.matchCount_3.setObjectName(u"matchCount_3")
|
||||
self.matchCount_3.setGeometry(QRect(190, 10, 31, 31))
|
||||
self.timerMinute = QLineEdit(self.groupBox)
|
||||
self.timerMinute.setObjectName(u"timerMinute")
|
||||
self.timerMinute.setGeometry(QRect(90, 10, 31, 31))
|
||||
self.timerMinute.setAlignment(Qt.AlignCenter)
|
||||
self.timerSet = QPushButton(self.groupBox)
|
||||
self.timerSet.setObjectName(u"timerSet")
|
||||
self.timerSet.setGeometry(QRect(210, 10, 61, 31))
|
||||
self.timerSet.setCheckable(False)
|
||||
self.timerSet.setAutoDefault(True)
|
||||
self.timerSet.setFlat(False)
|
||||
self.papagoApi = QPushButton(self.groupBox)
|
||||
self.papagoApi.setObjectName(u"papagoApi")
|
||||
self.papagoApi.setGeometry(QRect(330, 10, 101, 28))
|
||||
|
||||
self.horizontalLayout.addWidget(self.groupBox)
|
||||
|
||||
self.horizontalLayoutWidget_2 = QWidget(self.centralwidget)
|
||||
self.horizontalLayoutWidget_2.setObjectName(u"horizontalLayoutWidget_2")
|
||||
self.horizontalLayoutWidget_2.setGeometry(QRect(530, 10, 501, 51))
|
||||
self.horizontalLayout_2 = QHBoxLayout(self.horizontalLayoutWidget_2)
|
||||
self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
|
||||
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
|
||||
self.groupBox_2 = QGroupBox(self.horizontalLayoutWidget_2)
|
||||
self.groupBox_2.setObjectName(u"groupBox_2")
|
||||
self.sel_relatedTagbox = QLineEdit(self.groupBox_2)
|
||||
self.sel_relatedTagbox.setObjectName(u"sel_relatedTagbox")
|
||||
self.sel_relatedTagbox.setGeometry(QRect(90, 10, 401, 31))
|
||||
self.sel_relatedTagbox.setClearButtonEnabled(True)
|
||||
self.sel_item12_4 = QLabel(self.groupBox_2)
|
||||
self.sel_item12_4.setObjectName(u"sel_item12_4")
|
||||
self.sel_item12_4.setGeometry(QRect(10, 10, 75, 31))
|
||||
|
||||
self.horizontalLayout_2.addWidget(self.groupBox_2)
|
||||
|
||||
self.horizontalLayoutWidget_3 = QWidget(self.centralwidget)
|
||||
self.horizontalLayoutWidget_3.setObjectName(u"horizontalLayoutWidget_3")
|
||||
self.horizontalLayoutWidget_3.setGeometry(QRect(1040, 10, 491, 51))
|
||||
self.horizontalLayout_3 = QHBoxLayout(self.horizontalLayoutWidget_3)
|
||||
self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
|
||||
self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
|
||||
self.groupBox_3 = QGroupBox(self.horizontalLayoutWidget_3)
|
||||
self.groupBox_3.setObjectName(u"groupBox_3")
|
||||
self.taourlbox = QLineEdit(self.groupBox_3)
|
||||
self.taourlbox.setObjectName(u"taourlbox")
|
||||
self.taourlbox.setGeometry(QRect(140, 10, 341, 31))
|
||||
self.taourl = QLabel(self.groupBox_3)
|
||||
self.taourl.setObjectName(u"taourl")
|
||||
self.taourl.setGeometry(QRect(10, 10, 121, 31))
|
||||
|
||||
self.horizontalLayout_3.addWidget(self.groupBox_3)
|
||||
|
||||
self.horizontalLayoutWidget_4 = QWidget(self.centralwidget)
|
||||
self.horizontalLayoutWidget_4.setObjectName(u"horizontalLayoutWidget_4")
|
||||
self.horizontalLayoutWidget_4.setGeometry(QRect(10, 70, 511, 731))
|
||||
self.horizontalLayout_4 = QHBoxLayout(self.horizontalLayoutWidget_4)
|
||||
self.horizontalLayout_4.setObjectName(u"horizontalLayout_4")
|
||||
self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
|
||||
self.inputGroup = QGroupBox(self.horizontalLayoutWidget_4)
|
||||
self.inputGroup.setObjectName(u"inputGroup")
|
||||
self.inputGroup.setEnabled(True)
|
||||
self.Excel_btn = QPushButton(self.inputGroup)
|
||||
self.Excel_btn.setObjectName(u"Excel_btn")
|
||||
self.Excel_btn.setGeometry(QRect(10, 20, 51, 41))
|
||||
self.dbviewer1 = QTableView(self.inputGroup)
|
||||
self.dbviewer1.setObjectName(u"dbviewer1")
|
||||
self.dbviewer1.setGeometry(QRect(10, 180, 471, 541))
|
||||
self.isOverseas = QLineEdit(self.inputGroup)
|
||||
self.isOverseas.setObjectName(u"isOverseas")
|
||||
self.isOverseas.setGeometry(QRect(150, 20, 31, 31))
|
||||
self.isOverseas.setAlignment(Qt.AlignCenter)
|
||||
self.selkeyword_2 = QLabel(self.inputGroup)
|
||||
self.selkeyword_2.setObjectName(u"selkeyword_2")
|
||||
self.selkeyword_2.setGeometry(QRect(80, 20, 64, 31))
|
||||
self.selkeyword_3 = QLabel(self.inputGroup)
|
||||
self.selkeyword_3.setObjectName(u"selkeyword_3")
|
||||
self.selkeyword_3.setGeometry(QRect(80, 74, 64, 21))
|
||||
self.sortcount = QLineEdit(self.inputGroup)
|
||||
self.sortcount.setObjectName(u"sortcount")
|
||||
self.sortcount.setGeometry(QRect(150, 70, 31, 31))
|
||||
self.sortcount.setEchoMode(QLineEdit.Normal)
|
||||
self.sortcount.setCursorPosition(1)
|
||||
self.sortcount.setAlignment(Qt.AlignCenter)
|
||||
self.db_btn = QPushButton(self.inputGroup)
|
||||
self.db_btn.setObjectName(u"db_btn")
|
||||
self.db_btn.setGeometry(QRect(10, 70, 51, 41))
|
||||
self.export_btn = QPushButton(self.inputGroup)
|
||||
self.export_btn.setObjectName(u"export_btn")
|
||||
self.export_btn.setGeometry(QRect(390, 70, 91, 41))
|
||||
self.comboBox = QComboBox(self.inputGroup)
|
||||
self.comboBox.setObjectName(u"comboBox")
|
||||
self.comboBox.setGeometry(QRect(330, 120, 151, 31))
|
||||
self.matchCount = QLabel(self.inputGroup)
|
||||
self.matchCount.setObjectName(u"matchCount")
|
||||
self.matchCount.setGeometry(QRect(210, 20, 64, 31))
|
||||
self.matchCountbox = QLabel(self.inputGroup)
|
||||
self.matchCountbox.setObjectName(u"matchCountbox")
|
||||
self.matchCountbox.setGeometry(QRect(290, 20, 64, 31))
|
||||
font = QFont()
|
||||
font.setFamilies([u"Arial"])
|
||||
font.setPointSize(20)
|
||||
font.setBold(True)
|
||||
font.setUnderline(True)
|
||||
self.matchCountbox.setFont(font)
|
||||
self.matchCount_4 = QLabel(self.inputGroup)
|
||||
self.matchCount_4.setObjectName(u"matchCount_4")
|
||||
self.matchCount_4.setGeometry(QRect(210, 70, 64, 31))
|
||||
self.timerLabel = QLabel(self.inputGroup)
|
||||
self.timerLabel.setObjectName(u"timerLabel")
|
||||
self.timerLabel.setGeometry(QRect(270, 70, 111, 31))
|
||||
font1 = QFont()
|
||||
font1.setFamilies([u"Adobe Devanagari"])
|
||||
font1.setPointSize(20)
|
||||
font1.setBold(True)
|
||||
self.timerLabel.setFont(font1)
|
||||
self.timerLabel.setAlignment(Qt.AlignCenter)
|
||||
self.sc_button = QDialogButtonBox(self.inputGroup)
|
||||
self.sc_button.setObjectName(u"sc_button")
|
||||
self.sc_button.setGeometry(QRect(390, 30, 91, 31))
|
||||
self.sc_button.setStandardButtons(QDialogButtonBox.Apply)
|
||||
self.matchCount_5 = QLabel(self.inputGroup)
|
||||
self.matchCount_5.setObjectName(u"matchCount_5")
|
||||
self.matchCount_5.setGeometry(QRect(400, 10, 64, 21))
|
||||
self.sc_progressBar = QProgressBar(self.inputGroup)
|
||||
self.sc_progressBar.setObjectName(u"sc_progressBar")
|
||||
self.sc_progressBar.setGeometry(QRect(20, 120, 311, 20))
|
||||
self.sc_progressBar.setStyleSheet(u"font: 75 14pt \"Agency FB\";")
|
||||
self.sc_progressBar.setValue(0)
|
||||
self.img_progressBar = QProgressBar(self.inputGroup)
|
||||
self.img_progressBar.setObjectName(u"img_progressBar")
|
||||
self.img_progressBar.setGeometry(QRect(20, 150, 311, 20))
|
||||
self.img_progressBar.setStyleSheet(u"font: 75 14pt \"Agency FB\";")
|
||||
self.img_progressBar.setValue(0)
|
||||
self.selkeyword_4 = QLabel(self.inputGroup)
|
||||
self.selkeyword_4.setObjectName(u"selkeyword_4")
|
||||
self.selkeyword_4.setGeometry(QRect(130, 120, 51, 21))
|
||||
self.selkeyword_5 = QLabel(self.inputGroup)
|
||||
self.selkeyword_5.setObjectName(u"selkeyword_5")
|
||||
self.selkeyword_5.setGeometry(QRect(120, 150, 71, 21))
|
||||
|
||||
self.horizontalLayout_4.addWidget(self.inputGroup)
|
||||
|
||||
self.horizontalLayoutWidget_5 = QWidget(self.centralwidget)
|
||||
self.horizontalLayoutWidget_5.setObjectName(u"horizontalLayoutWidget_5")
|
||||
self.horizontalLayoutWidget_5.setGeometry(QRect(530, 70, 501, 851))
|
||||
self.horizontalLayout_5 = QHBoxLayout(self.horizontalLayoutWidget_5)
|
||||
self.horizontalLayout_5.setObjectName(u"horizontalLayout_5")
|
||||
self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0)
|
||||
self.groupBox_4 = QGroupBox(self.horizontalLayoutWidget_5)
|
||||
self.groupBox_4.setObjectName(u"groupBox_4")
|
||||
self.graphicsView_multi = QGraphicsView(self.groupBox_4)
|
||||
self.graphicsView_multi.setObjectName(u"graphicsView_multi")
|
||||
self.graphicsView_multi.setGeometry(QRect(310, 30, 170, 810))
|
||||
self.groupBox_5 = QGroupBox(self.groupBox_4)
|
||||
self.groupBox_5.setObjectName(u"groupBox_5")
|
||||
self.groupBox_5.setGeometry(QRect(10, 30, 291, 141))
|
||||
self.sel_item11_2 = QLabel(self.groupBox_5)
|
||||
self.sel_item11_2.setObjectName(u"sel_item11_2")
|
||||
self.sel_item11_2.setGeometry(QRect(10, 20, 31, 20))
|
||||
self.sel_itembox11 = QLineEdit(self.groupBox_5)
|
||||
self.sel_itembox11.setObjectName(u"sel_itembox11")
|
||||
self.sel_itembox11.setGeometry(QRect(60, 20, 221, 21))
|
||||
self.sel_item12_5 = QLabel(self.groupBox_5)
|
||||
self.sel_item12_5.setObjectName(u"sel_item12_5")
|
||||
self.sel_item12_5.setGeometry(QRect(10, 50, 51, 20))
|
||||
self.sel_itembox12 = QLineEdit(self.groupBox_5)
|
||||
self.sel_itembox12.setObjectName(u"sel_itembox12")
|
||||
self.sel_itembox12.setGeometry(QRect(60, 50, 221, 21))
|
||||
self.sel_item12_2 = QLabel(self.groupBox_5)
|
||||
self.sel_item12_2.setObjectName(u"sel_item12_2")
|
||||
self.sel_item12_2.setGeometry(QRect(10, 80, 51, 20))
|
||||
self.sel_itembox13 = QLineEdit(self.groupBox_5)
|
||||
self.sel_itembox13.setObjectName(u"sel_itembox13")
|
||||
self.sel_itembox13.setGeometry(QRect(60, 80, 101, 21))
|
||||
self.sel_item12_3 = QLabel(self.groupBox_5)
|
||||
self.sel_item12_3.setObjectName(u"sel_item12_3")
|
||||
self.sel_item12_3.setGeometry(QRect(170, 80, 31, 20))
|
||||
self.sel_itembox14 = QLineEdit(self.groupBox_5)
|
||||
self.sel_itembox14.setObjectName(u"sel_itembox14")
|
||||
self.sel_itembox14.setGeometry(QRect(210, 80, 71, 21))
|
||||
self.sel_item11 = QLabel(self.groupBox_5)
|
||||
self.sel_item11.setObjectName(u"sel_item11")
|
||||
self.sel_item11.setGeometry(QRect(10, 110, 51, 20))
|
||||
self.sel_itembox15 = QLineEdit(self.groupBox_5)
|
||||
self.sel_itembox15.setObjectName(u"sel_itembox15")
|
||||
self.sel_itembox15.setGeometry(QRect(60, 110, 91, 21))
|
||||
self.sel_item12 = QLabel(self.groupBox_5)
|
||||
self.sel_item12.setObjectName(u"sel_item12")
|
||||
self.sel_item12.setGeometry(QRect(160, 110, 61, 20))
|
||||
self.sel_itembox16 = QLineEdit(self.groupBox_5)
|
||||
self.sel_itembox16.setObjectName(u"sel_itembox16")
|
||||
self.sel_itembox16.setGeometry(QRect(230, 110, 51, 21))
|
||||
self.groupBox_6 = QGroupBox(self.groupBox_4)
|
||||
self.groupBox_6.setObjectName(u"groupBox_6")
|
||||
self.groupBox_6.setGeometry(QRect(10, 180, 291, 161))
|
||||
self.sel_item11_3 = QLabel(self.groupBox_6)
|
||||
self.sel_item11_3.setObjectName(u"sel_item11_3")
|
||||
self.sel_item11_3.setGeometry(QRect(10, 20, 31, 20))
|
||||
self.sel_itembox21 = QLineEdit(self.groupBox_6)
|
||||
self.sel_itembox21.setObjectName(u"sel_itembox21")
|
||||
self.sel_itembox21.setGeometry(QRect(60, 20, 221, 21))
|
||||
self.sel_item12_6 = QLabel(self.groupBox_6)
|
||||
self.sel_item12_6.setObjectName(u"sel_item12_6")
|
||||
self.sel_item12_6.setGeometry(QRect(10, 50, 51, 20))
|
||||
self.sel_itembox22 = QLineEdit(self.groupBox_6)
|
||||
self.sel_itembox22.setObjectName(u"sel_itembox22")
|
||||
self.sel_itembox22.setGeometry(QRect(60, 50, 221, 21))
|
||||
self.sel_item12_7 = QLabel(self.groupBox_6)
|
||||
self.sel_item12_7.setObjectName(u"sel_item12_7")
|
||||
self.sel_item12_7.setGeometry(QRect(0, 70, 51, 20))
|
||||
self.sel_itembox23 = QLineEdit(self.groupBox_6)
|
||||
self.sel_itembox23.setObjectName(u"sel_itembox23")
|
||||
self.sel_itembox23.setGeometry(QRect(60, 80, 101, 21))
|
||||
self.sel_item12_8 = QLabel(self.groupBox_6)
|
||||
self.sel_item12_8.setObjectName(u"sel_item12_8")
|
||||
self.sel_item12_8.setGeometry(QRect(170, 80, 31, 20))
|
||||
self.sel_itembox24 = QLineEdit(self.groupBox_6)
|
||||
self.sel_itembox24.setObjectName(u"sel_itembox24")
|
||||
self.sel_itembox24.setGeometry(QRect(210, 80, 71, 21))
|
||||
self.sel_item11_4 = QLabel(self.groupBox_6)
|
||||
self.sel_item11_4.setObjectName(u"sel_item11_4")
|
||||
self.sel_item11_4.setGeometry(QRect(10, 110, 51, 20))
|
||||
self.sel_itembox25 = QLineEdit(self.groupBox_6)
|
||||
self.sel_itembox25.setObjectName(u"sel_itembox25")
|
||||
self.sel_itembox25.setGeometry(QRect(60, 110, 91, 21))
|
||||
self.sel_item12_9 = QLabel(self.groupBox_6)
|
||||
self.sel_item12_9.setObjectName(u"sel_item12_9")
|
||||
self.sel_item12_9.setGeometry(QRect(160, 110, 61, 20))
|
||||
self.sel_itembox26 = QLineEdit(self.groupBox_6)
|
||||
self.sel_itembox26.setObjectName(u"sel_itembox26")
|
||||
self.sel_itembox26.setGeometry(QRect(230, 110, 51, 21))
|
||||
self.groupBox_7 = QGroupBox(self.groupBox_4)
|
||||
self.groupBox_7.setObjectName(u"groupBox_7")
|
||||
self.groupBox_7.setGeometry(QRect(10, 350, 291, 161))
|
||||
self.sel_item11_5 = QLabel(self.groupBox_7)
|
||||
self.sel_item11_5.setObjectName(u"sel_item11_5")
|
||||
self.sel_item11_5.setGeometry(QRect(10, 20, 31, 20))
|
||||
self.sel_itembox31 = QLineEdit(self.groupBox_7)
|
||||
self.sel_itembox31.setObjectName(u"sel_itembox31")
|
||||
self.sel_itembox31.setGeometry(QRect(60, 20, 221, 21))
|
||||
self.sel_item12_10 = QLabel(self.groupBox_7)
|
||||
self.sel_item12_10.setObjectName(u"sel_item12_10")
|
||||
self.sel_item12_10.setGeometry(QRect(10, 50, 51, 20))
|
||||
self.sel_itembox32 = QLineEdit(self.groupBox_7)
|
||||
self.sel_itembox32.setObjectName(u"sel_itembox32")
|
||||
self.sel_itembox32.setGeometry(QRect(60, 50, 221, 21))
|
||||
self.sel_item12_11 = QLabel(self.groupBox_7)
|
||||
self.sel_item12_11.setObjectName(u"sel_item12_11")
|
||||
self.sel_item12_11.setGeometry(QRect(10, 80, 51, 20))
|
||||
self.sel_itembox33 = QLineEdit(self.groupBox_7)
|
||||
self.sel_itembox33.setObjectName(u"sel_itembox33")
|
||||
self.sel_itembox33.setGeometry(QRect(60, 80, 101, 21))
|
||||
self.sel_item12_12 = QLabel(self.groupBox_7)
|
||||
self.sel_item12_12.setObjectName(u"sel_item12_12")
|
||||
self.sel_item12_12.setGeometry(QRect(170, 80, 31, 20))
|
||||
self.sel_itembox34 = QLineEdit(self.groupBox_7)
|
||||
self.sel_itembox34.setObjectName(u"sel_itembox34")
|
||||
self.sel_itembox34.setGeometry(QRect(210, 80, 71, 21))
|
||||
self.sel_item11_6 = QLabel(self.groupBox_7)
|
||||
self.sel_item11_6.setObjectName(u"sel_item11_6")
|
||||
self.sel_item11_6.setGeometry(QRect(10, 110, 51, 20))
|
||||
self.sel_itembox35 = QLineEdit(self.groupBox_7)
|
||||
self.sel_itembox35.setObjectName(u"sel_itembox35")
|
||||
self.sel_itembox35.setGeometry(QRect(60, 110, 91, 21))
|
||||
self.sel_item12_13 = QLabel(self.groupBox_7)
|
||||
self.sel_item12_13.setObjectName(u"sel_item12_13")
|
||||
self.sel_item12_13.setGeometry(QRect(160, 110, 61, 20))
|
||||
self.sel_itembox36 = QLineEdit(self.groupBox_7)
|
||||
self.sel_itembox36.setObjectName(u"sel_itembox36")
|
||||
self.sel_itembox36.setGeometry(QRect(230, 110, 51, 21))
|
||||
self.groupBox_8 = QGroupBox(self.groupBox_4)
|
||||
self.groupBox_8.setObjectName(u"groupBox_8")
|
||||
self.groupBox_8.setGeometry(QRect(10, 520, 291, 151))
|
||||
self.sel_item11_7 = QLabel(self.groupBox_8)
|
||||
self.sel_item11_7.setObjectName(u"sel_item11_7")
|
||||
self.sel_item11_7.setGeometry(QRect(10, 20, 31, 20))
|
||||
self.sel_itembox41 = QLineEdit(self.groupBox_8)
|
||||
self.sel_itembox41.setObjectName(u"sel_itembox41")
|
||||
self.sel_itembox41.setGeometry(QRect(60, 20, 221, 21))
|
||||
self.sel_item12_14 = QLabel(self.groupBox_8)
|
||||
self.sel_item12_14.setObjectName(u"sel_item12_14")
|
||||
self.sel_item12_14.setGeometry(QRect(10, 50, 51, 20))
|
||||
self.sel_itembox42 = QLineEdit(self.groupBox_8)
|
||||
self.sel_itembox42.setObjectName(u"sel_itembox42")
|
||||
self.sel_itembox42.setGeometry(QRect(60, 50, 221, 21))
|
||||
self.sel_item12_15 = QLabel(self.groupBox_8)
|
||||
self.sel_item12_15.setObjectName(u"sel_item12_15")
|
||||
self.sel_item12_15.setGeometry(QRect(10, 80, 51, 20))
|
||||
self.sel_itembox43 = QLineEdit(self.groupBox_8)
|
||||
self.sel_itembox43.setObjectName(u"sel_itembox43")
|
||||
self.sel_itembox43.setGeometry(QRect(60, 80, 101, 21))
|
||||
self.sel_item12_16 = QLabel(self.groupBox_8)
|
||||
self.sel_item12_16.setObjectName(u"sel_item12_16")
|
||||
self.sel_item12_16.setGeometry(QRect(170, 80, 31, 20))
|
||||
self.sel_itembox44 = QLineEdit(self.groupBox_8)
|
||||
self.sel_itembox44.setObjectName(u"sel_itembox44")
|
||||
self.sel_itembox44.setGeometry(QRect(210, 80, 71, 21))
|
||||
self.sel_item11_8 = QLabel(self.groupBox_8)
|
||||
self.sel_item11_8.setObjectName(u"sel_item11_8")
|
||||
self.sel_item11_8.setGeometry(QRect(10, 110, 51, 20))
|
||||
self.sel_itembox45 = QLineEdit(self.groupBox_8)
|
||||
self.sel_itembox45.setObjectName(u"sel_itembox45")
|
||||
self.sel_itembox45.setGeometry(QRect(60, 110, 91, 21))
|
||||
self.sel_item12_17 = QLabel(self.groupBox_8)
|
||||
self.sel_item12_17.setObjectName(u"sel_item12_17")
|
||||
self.sel_item12_17.setGeometry(QRect(160, 110, 61, 20))
|
||||
self.sel_itembox46 = QLineEdit(self.groupBox_8)
|
||||
self.sel_itembox46.setObjectName(u"sel_itembox46")
|
||||
self.sel_itembox46.setGeometry(QRect(230, 110, 51, 21))
|
||||
self.groupBox_9 = QGroupBox(self.groupBox_4)
|
||||
self.groupBox_9.setObjectName(u"groupBox_9")
|
||||
self.groupBox_9.setGeometry(QRect(10, 680, 291, 161))
|
||||
self.sel_item11_9 = QLabel(self.groupBox_9)
|
||||
self.sel_item11_9.setObjectName(u"sel_item11_9")
|
||||
self.sel_item11_9.setGeometry(QRect(10, 20, 31, 20))
|
||||
self.sel_itembox51 = QLineEdit(self.groupBox_9)
|
||||
self.sel_itembox51.setObjectName(u"sel_itembox51")
|
||||
self.sel_itembox51.setGeometry(QRect(60, 20, 221, 21))
|
||||
self.sel_item12_18 = QLabel(self.groupBox_9)
|
||||
self.sel_item12_18.setObjectName(u"sel_item12_18")
|
||||
self.sel_item12_18.setGeometry(QRect(10, 50, 51, 20))
|
||||
self.sel_itembox52 = QLineEdit(self.groupBox_9)
|
||||
self.sel_itembox52.setObjectName(u"sel_itembox52")
|
||||
self.sel_itembox52.setGeometry(QRect(60, 50, 221, 21))
|
||||
self.sel_item12_19 = QLabel(self.groupBox_9)
|
||||
self.sel_item12_19.setObjectName(u"sel_item12_19")
|
||||
self.sel_item12_19.setGeometry(QRect(10, 80, 51, 20))
|
||||
self.sel_itembox53 = QLineEdit(self.groupBox_9)
|
||||
self.sel_itembox53.setObjectName(u"sel_itembox53")
|
||||
self.sel_itembox53.setGeometry(QRect(60, 80, 101, 21))
|
||||
self.sel_item12_20 = QLabel(self.groupBox_9)
|
||||
self.sel_item12_20.setObjectName(u"sel_item12_20")
|
||||
self.sel_item12_20.setGeometry(QRect(170, 80, 31, 20))
|
||||
self.sel_itembox54 = QLineEdit(self.groupBox_9)
|
||||
self.sel_itembox54.setObjectName(u"sel_itembox54")
|
||||
self.sel_itembox54.setGeometry(QRect(210, 80, 71, 21))
|
||||
self.sel_item11_10 = QLabel(self.groupBox_9)
|
||||
self.sel_item11_10.setObjectName(u"sel_item11_10")
|
||||
self.sel_item11_10.setGeometry(QRect(10, 110, 51, 20))
|
||||
self.sel_itembox55 = QLineEdit(self.groupBox_9)
|
||||
self.sel_itembox55.setObjectName(u"sel_itembox55")
|
||||
self.sel_itembox55.setGeometry(QRect(60, 110, 91, 21))
|
||||
self.sel_item12_21 = QLabel(self.groupBox_9)
|
||||
self.sel_item12_21.setObjectName(u"sel_item12_21")
|
||||
self.sel_item12_21.setGeometry(QRect(160, 110, 61, 20))
|
||||
self.sel_itembox56 = QLineEdit(self.groupBox_9)
|
||||
self.sel_itembox56.setObjectName(u"sel_itembox56")
|
||||
self.sel_itembox56.setGeometry(QRect(230, 110, 51, 21))
|
||||
self.urlgobtn = QPushButton(self.groupBox_4)
|
||||
self.urlgobtn.setObjectName(u"urlgobtn")
|
||||
self.urlgobtn.setGeometry(QRect(1280, 800, 41, 31))
|
||||
|
||||
self.horizontalLayout_5.addWidget(self.groupBox_4)
|
||||
|
||||
self.horizontalLayoutWidget_6 = QWidget(self.centralwidget)
|
||||
self.horizontalLayoutWidget_6.setObjectName(u"horizontalLayoutWidget_6")
|
||||
self.horizontalLayoutWidget_6.setGeometry(QRect(1040, 70, 851, 851))
|
||||
self.horizontalLayout_6 = QHBoxLayout(self.horizontalLayoutWidget_6)
|
||||
self.horizontalLayout_6.setObjectName(u"horizontalLayout_6")
|
||||
self.horizontalLayout_6.setContentsMargins(0, 0, 0, 0)
|
||||
self.groupBox_10 = QGroupBox(self.horizontalLayoutWidget_6)
|
||||
self.groupBox_10.setObjectName(u"groupBox_10")
|
||||
self.selkeyword = QLabel(self.groupBox_10)
|
||||
self.selkeyword.setObjectName(u"selkeyword")
|
||||
self.selkeyword.setGeometry(QRect(10, 250, 131, 20))
|
||||
self.selkeyword.setAlignment(Qt.AlignCenter)
|
||||
self.urlbox = QLineEdit(self.groupBox_10)
|
||||
self.urlbox.setObjectName(u"urlbox")
|
||||
self.urlbox.setGeometry(QRect(150, 810, 631, 31))
|
||||
self.urlbox.setDragEnabled(False)
|
||||
self.urlbox.setClearButtonEnabled(True)
|
||||
self.deliveryfee = QLabel(self.groupBox_10)
|
||||
self.deliveryfee.setObjectName(u"deliveryfee")
|
||||
self.deliveryfee.setGeometry(QRect(10, 370, 64, 15))
|
||||
self.deliveryfee.setWordWrap(False)
|
||||
self.addmargin = QLabel(self.groupBox_10)
|
||||
self.addmargin.setObjectName(u"addmargin")
|
||||
self.addmargin.setGeometry(QRect(10, 490, 81, 16))
|
||||
self.addmargin.setWordWrap(False)
|
||||
self.addpackingfee = QLabel(self.groupBox_10)
|
||||
self.addpackingfee.setObjectName(u"addpackingfee")
|
||||
self.addpackingfee.setGeometry(QRect(10, 430, 91, 16))
|
||||
self.addpackingfee.setWordWrap(False)
|
||||
self.selkeywordbox = QLineEdit(self.groupBox_10)
|
||||
self.selkeywordbox.setObjectName(u"selkeywordbox")
|
||||
self.selkeywordbox.setGeometry(QRect(10, 270, 131, 31))
|
||||
self.selkeywordbox.setStyleSheet(u"font: 10pt \"\uc0c8\uad74\ub9bc\";")
|
||||
self.selkeywordbox.setClearButtonEnabled(True)
|
||||
self.urlgobtn_2 = QPushButton(self.groupBox_10)
|
||||
self.urlgobtn_2.setObjectName(u"urlgobtn_2")
|
||||
self.urlgobtn_2.setGeometry(QRect(790, 810, 51, 31))
|
||||
self.sel_item12_42 = QLabel(self.groupBox_10)
|
||||
self.sel_item12_42.setObjectName(u"sel_item12_42")
|
||||
self.sel_item12_42.setGeometry(QRect(10, 310, 51, 20))
|
||||
self.sel_itemtagbox = QLineEdit(self.groupBox_10)
|
||||
self.sel_itemtagbox.setObjectName(u"sel_itemtagbox")
|
||||
self.sel_itemtagbox.setGeometry(QRect(10, 330, 131, 31))
|
||||
self.sel_itemtagbox.setClearButtonEnabled(True)
|
||||
self.matchbtn = QPushButton(self.groupBox_10)
|
||||
self.matchbtn.setObjectName(u"matchbtn")
|
||||
self.matchbtn.setGeometry(QRect(10, 200, 121, 41))
|
||||
self.matchbtn.setStyleSheet(u"background-color: rgb(0, 255, 255);\n"
|
||||
"font: 16pt \"HY\ud5e4\ub4dc\ub77c\uc778M\";")
|
||||
self.search_keyword_box = QLineEdit(self.groupBox_10)
|
||||
self.search_keyword_box.setObjectName(u"search_keyword_box")
|
||||
self.search_keyword_box.setGeometry(QRect(140, 10, 191, 41))
|
||||
self.search_keyword_box.setClearButtonEnabled(True)
|
||||
self.searchbtn_2 = QPushButton(self.groupBox_10)
|
||||
self.searchbtn_2.setObjectName(u"searchbtn_2")
|
||||
self.searchbtn_2.setGeometry(QRect(340, 10, 111, 41))
|
||||
self.searchbtn_2.setCheckable(False)
|
||||
self.searchbtn_2.setAutoDefault(True)
|
||||
self.searchbtn_2.setFlat(False)
|
||||
self.switchBtn = QPushButton(self.groupBox_10)
|
||||
self.switchBtn.setObjectName(u"switchBtn")
|
||||
self.switchBtn.setGeometry(QRect(734, 10, 101, 41))
|
||||
self.tabWidget = QTabWidget(self.groupBox_10)
|
||||
self.tabWidget.setObjectName(u"tabWidget")
|
||||
self.tabWidget.setGeometry(QRect(140, 60, 701, 741))
|
||||
self.tabWidget.setTabBarAutoHide(False)
|
||||
self.tab_1 = QWidget()
|
||||
self.tab_1.setObjectName(u"tab_1")
|
||||
self.webEngineView = QWebEngineView(self.tab_1)
|
||||
self.webEngineView.setObjectName(u"webEngineView")
|
||||
self.webEngineView.setGeometry(QRect(0, 0, 711, 731))
|
||||
self.webEngineView.setUrl(QUrl(u"https://m.intl.taobao.com/"))
|
||||
self.webEngineView.setZoomFactor(0.500000000000000)
|
||||
self.tabWidget.addTab(self.tab_1, "")
|
||||
self.tab_2 = QWidget()
|
||||
self.tab_2.setObjectName(u"tab_2")
|
||||
self.webEngineView_2 = QWebEngineView(self.tab_2)
|
||||
self.webEngineView_2.setObjectName(u"webEngineView_2")
|
||||
self.webEngineView_2.setGeometry(QRect(10, 10, 711, 711))
|
||||
self.webEngineView_2.setUrl(QUrl(u"https://world.taobao.com/"))
|
||||
self.webEngineView_2.setZoomFactor(0.400000000000000)
|
||||
self.tabWidget.addTab(self.tab_2, "")
|
||||
self.cat1 = QLabel(self.groupBox_10)
|
||||
self.cat1.setObjectName(u"cat1")
|
||||
self.cat1.setGeometry(QRect(10, 550, 81, 16))
|
||||
self.cat1.setWordWrap(False)
|
||||
self.cat2 = QLabel(self.groupBox_10)
|
||||
self.cat2.setObjectName(u"cat2")
|
||||
self.cat2.setGeometry(QRect(10, 610, 81, 16))
|
||||
self.cat2.setWordWrap(False)
|
||||
self.cat3 = QLabel(self.groupBox_10)
|
||||
self.cat3.setObjectName(u"cat3")
|
||||
self.cat3.setGeometry(QRect(10, 670, 81, 16))
|
||||
self.cat3.setWordWrap(False)
|
||||
self.cat4 = QLabel(self.groupBox_10)
|
||||
self.cat4.setObjectName(u"cat4")
|
||||
self.cat4.setGeometry(QRect(10, 730, 81, 16))
|
||||
self.cat4.setWordWrap(False)
|
||||
self.catbox1 = QLineEdit(self.groupBox_10)
|
||||
self.catbox1.setObjectName(u"catbox1")
|
||||
self.catbox1.setGeometry(QRect(10, 570, 131, 31))
|
||||
self.catbox1.setClearButtonEnabled(True)
|
||||
self.catbox2 = QLineEdit(self.groupBox_10)
|
||||
self.catbox2.setObjectName(u"catbox2")
|
||||
self.catbox2.setGeometry(QRect(10, 630, 131, 31))
|
||||
self.catbox2.setClearButtonEnabled(True)
|
||||
self.catbox3 = QLineEdit(self.groupBox_10)
|
||||
self.catbox3.setObjectName(u"catbox3")
|
||||
self.catbox3.setGeometry(QRect(10, 690, 131, 31))
|
||||
self.catbox3.setClearButtonEnabled(True)
|
||||
self.catbox4 = QLineEdit(self.groupBox_10)
|
||||
self.catbox4.setObjectName(u"catbox4")
|
||||
self.catbox4.setGeometry(QRect(10, 750, 131, 31))
|
||||
self.catbox4.setClearButtonEnabled(True)
|
||||
self.catcodebox = QLineEdit(self.groupBox_10)
|
||||
self.catcodebox.setObjectName(u"catcodebox")
|
||||
self.catcodebox.setGeometry(QRect(10, 810, 131, 31))
|
||||
self.catcodebox.setClearButtonEnabled(True)
|
||||
self.cat4_2 = QLabel(self.groupBox_10)
|
||||
self.cat4_2.setObjectName(u"cat4_2")
|
||||
self.cat4_2.setGeometry(QRect(10, 790, 101, 16))
|
||||
self.cat4_2.setWordWrap(False)
|
||||
self.addmargin_spbox = QSpinBox(self.groupBox_10)
|
||||
self.addmargin_spbox.setObjectName(u"addmargin_spbox")
|
||||
self.addmargin_spbox.setGeometry(QRect(10, 510, 131, 31))
|
||||
sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.addmargin_spbox.sizePolicy().hasHeightForWidth())
|
||||
self.addmargin_spbox.setSizePolicy(sizePolicy)
|
||||
font2 = QFont()
|
||||
font2.setFamilies([u"Agency FB"])
|
||||
font2.setPointSize(16)
|
||||
self.addmargin_spbox.setFont(font2)
|
||||
self.addmargin_spbox.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
|
||||
self.addmargin_spbox.setButtonSymbols(QAbstractSpinBox.PlusMinus)
|
||||
self.addmargin_spbox.setCorrectionMode(QAbstractSpinBox.CorrectToPreviousValue)
|
||||
self.addmargin_spbox.setMinimum(1000)
|
||||
self.addmargin_spbox.setMaximum(600000)
|
||||
self.addmargin_spbox.setSingleStep(1000)
|
||||
self.addmargin_spbox.setStepType(QAbstractSpinBox.DefaultStepType)
|
||||
self.addmargin_spbox.setValue(5000)
|
||||
self.addmargin_spbox.setDisplayIntegerBase(10)
|
||||
self.addpackingfee_spbox = QSpinBox(self.groupBox_10)
|
||||
self.addpackingfee_spbox.setObjectName(u"addpackingfee_spbox")
|
||||
self.addpackingfee_spbox.setGeometry(QRect(10, 450, 131, 31))
|
||||
sizePolicy.setHeightForWidth(self.addpackingfee_spbox.sizePolicy().hasHeightForWidth())
|
||||
self.addpackingfee_spbox.setSizePolicy(sizePolicy)
|
||||
self.addpackingfee_spbox.setFont(font2)
|
||||
self.addpackingfee_spbox.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
|
||||
self.addpackingfee_spbox.setButtonSymbols(QAbstractSpinBox.PlusMinus)
|
||||
self.addpackingfee_spbox.setCorrectionMode(QAbstractSpinBox.CorrectToPreviousValue)
|
||||
self.addpackingfee_spbox.setMinimum(0)
|
||||
self.addpackingfee_spbox.setMaximum(100000)
|
||||
self.addpackingfee_spbox.setSingleStep(1000)
|
||||
self.addpackingfee_spbox.setStepType(QAbstractSpinBox.DefaultStepType)
|
||||
self.addpackingfee_spbox.setValue(0)
|
||||
self.addpackingfee_spbox.setDisplayIntegerBase(10)
|
||||
self.delivfee_spbox = QSpinBox(self.groupBox_10)
|
||||
self.delivfee_spbox.setObjectName(u"delivfee_spbox")
|
||||
self.delivfee_spbox.setGeometry(QRect(10, 390, 131, 31))
|
||||
sizePolicy.setHeightForWidth(self.delivfee_spbox.sizePolicy().hasHeightForWidth())
|
||||
self.delivfee_spbox.setSizePolicy(sizePolicy)
|
||||
self.delivfee_spbox.setFont(font2)
|
||||
self.delivfee_spbox.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
|
||||
self.delivfee_spbox.setButtonSymbols(QAbstractSpinBox.PlusMinus)
|
||||
self.delivfee_spbox.setCorrectionMode(QAbstractSpinBox.CorrectToPreviousValue)
|
||||
self.delivfee_spbox.setMinimum(7000)
|
||||
self.delivfee_spbox.setMaximum(6000000)
|
||||
self.delivfee_spbox.setSingleStep(1000)
|
||||
self.delivfee_spbox.setStepType(QAbstractSpinBox.DefaultStepType)
|
||||
self.delivfee_spbox.setValue(7000)
|
||||
self.delivfee_spbox.setDisplayIntegerBase(10)
|
||||
self.img_searchbtn = QPushButton(self.groupBox_10)
|
||||
self.img_searchbtn.setObjectName(u"img_searchbtn")
|
||||
self.img_searchbtn.setGeometry(QRect(10, 10, 121, 41))
|
||||
self.current_img = QGraphicsView(self.groupBox_10)
|
||||
self.current_img.setObjectName(u"current_img")
|
||||
self.current_img.setGeometry(QRect(10, 70, 120, 120))
|
||||
self.backbtn = QPushButton(self.groupBox_10)
|
||||
self.backbtn.setObjectName(u"backbtn")
|
||||
self.backbtn.setGeometry(QRect(530, 10, 61, 41))
|
||||
self.forwardbtn = QPushButton(self.groupBox_10)
|
||||
self.forwardbtn.setObjectName(u"forwardbtn")
|
||||
self.forwardbtn.setGeometry(QRect(600, 10, 61, 41))
|
||||
|
||||
self.horizontalLayout_6.addWidget(self.groupBox_10)
|
||||
|
||||
self.verticalLayoutWidget = QWidget(self.centralwidget)
|
||||
self.verticalLayoutWidget.setObjectName(u"verticalLayoutWidget")
|
||||
self.verticalLayoutWidget.setGeometry(QRect(1549, 10, 341, 51))
|
||||
self.verticalLayout = QVBoxLayout(self.verticalLayoutWidget)
|
||||
self.verticalLayout.setObjectName(u"verticalLayout")
|
||||
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
|
||||
self.loginUser = QLabel(self.verticalLayoutWidget)
|
||||
self.loginUser.setObjectName(u"loginUser")
|
||||
|
||||
self.verticalLayout.addWidget(self.loginUser)
|
||||
|
||||
self.verticalLayoutWidget_2 = QWidget(self.centralwidget)
|
||||
self.verticalLayoutWidget_2.setObjectName(u"verticalLayoutWidget_2")
|
||||
self.verticalLayoutWidget_2.setGeometry(QRect(10, 810, 511, 161))
|
||||
self.verticalLayout_4 = QVBoxLayout(self.verticalLayoutWidget_2)
|
||||
self.verticalLayout_4.setObjectName(u"verticalLayout_4")
|
||||
self.verticalLayout_4.setContentsMargins(0, 0, 0, 0)
|
||||
self.loginUserInfo = QLabel(self.verticalLayoutWidget_2)
|
||||
self.loginUserInfo.setObjectName(u"loginUserInfo")
|
||||
|
||||
self.verticalLayout_4.addWidget(self.loginUserInfo)
|
||||
|
||||
MainWindow.setCentralWidget(self.centralwidget)
|
||||
self.menubar = QMenuBar(MainWindow)
|
||||
self.menubar.setObjectName(u"menubar")
|
||||
self.menubar.setGeometry(QRect(0, 0, 1902, 26))
|
||||
self.menu = QMenu(self.menubar)
|
||||
self.menu.setObjectName(u"menu")
|
||||
self.menu_2 = QMenu(self.menubar)
|
||||
self.menu_2.setObjectName(u"menu_2")
|
||||
self.menu_3 = QMenu(self.menubar)
|
||||
self.menu_3.setObjectName(u"menu_3")
|
||||
MainWindow.setMenuBar(self.menubar)
|
||||
self.statusbar = QStatusBar(MainWindow)
|
||||
self.statusbar.setObjectName(u"statusbar")
|
||||
MainWindow.setStatusBar(self.statusbar)
|
||||
|
||||
self.menubar.addAction(self.menu.menuAction())
|
||||
self.menubar.addAction(self.menu_2.menuAction())
|
||||
self.menubar.addAction(self.menu_3.menuAction())
|
||||
|
||||
self.retranslateUi(MainWindow)
|
||||
|
||||
self.timerStart.setDefault(True)
|
||||
self.timerStop.setDefault(True)
|
||||
self.timerSet.setDefault(True)
|
||||
self.searchbtn_2.setDefault(True)
|
||||
self.tabWidget.setCurrentIndex(1)
|
||||
|
||||
|
||||
QMetaObject.connectSlotsByName(MainWindow)
|
||||
# setupUi
|
||||
|
||||
def retranslateUi(self, MainWindow):
|
||||
MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
|
||||
self.groupBox.setTitle("")
|
||||
self.matchCount_2.setText(QCoreApplication.translate("MainWindow", u"\ubd84", None))
|
||||
self.timerStart.setText(QCoreApplication.translate("MainWindow", u"Start", None))
|
||||
self.timerStop.setText(QCoreApplication.translate("MainWindow", u"Stop", None))
|
||||
self.timerSecond.setText(QCoreApplication.translate("MainWindow", u"00", None))
|
||||
self.matchCount_3.setText(QCoreApplication.translate("MainWindow", u"\ucd08", None))
|
||||
self.timerMinute.setText(QCoreApplication.translate("MainWindow", u"60", None))
|
||||
self.timerSet.setText(QCoreApplication.translate("MainWindow", u"Set", None))
|
||||
self.papagoApi.setText(QCoreApplication.translate("MainWindow", u"PAPAGO API", None))
|
||||
self.groupBox_2.setTitle("")
|
||||
self.sel_item12_4.setText(QCoreApplication.translate("MainWindow", u"\uc5f0\uad00\ud0a4\uc6cc\ub4dc", None))
|
||||
self.groupBox_3.setTitle("")
|
||||
self.taourl.setText(QCoreApplication.translate("MainWindow", u"\ud0c0\uc624\ubc14\uc774 PC-URL", None))
|
||||
self.inputGroup.setTitle(QCoreApplication.translate("MainWindow", u"\uc785\ub825\uc601\uc5ed", None))
|
||||
self.Excel_btn.setText(QCoreApplication.translate("MainWindow", u"\uc5d1\uc140\n"
|
||||
"\uc5f4\uae30", None))
|
||||
self.isOverseas.setText(QCoreApplication.translate("MainWindow", u"1", None))
|
||||
self.selkeyword_2.setText(QCoreApplication.translate("MainWindow", u"\ud574\uc678\uc5ec\ubd80", None))
|
||||
self.selkeyword_3.setText(QCoreApplication.translate("MainWindow", u"\ucd94\ucd9c\uac2f\uc218", None))
|
||||
self.sortcount.setText(QCoreApplication.translate("MainWindow", u"5", None))
|
||||
self.db_btn.setText(QCoreApplication.translate("MainWindow", u"DB\n"
|
||||
"\uc5f4\uae30", None))
|
||||
self.export_btn.setText(QCoreApplication.translate("MainWindow", u"XLS\n"
|
||||
"\uc800\uc7a5", None))
|
||||
self.matchCount.setText(QCoreApplication.translate("MainWindow", u"\ub9e4\uce6d\uac2f\uc218", None))
|
||||
self.matchCountbox.setText("")
|
||||
self.matchCount_4.setText(QCoreApplication.translate("MainWindow", u"\ud0c0\uc774\uba38", None))
|
||||
self.timerLabel.setText(QCoreApplication.translate("MainWindow", u"60:00", None))
|
||||
self.matchCount_5.setText(QCoreApplication.translate("MainWindow", u"\uc2a4\ud06c\ub798\ud551", None))
|
||||
self.selkeyword_4.setText(QCoreApplication.translate("MainWindow", u"Scraping", None))
|
||||
self.selkeyword_5.setText(QCoreApplication.translate("MainWindow", u"Save Image", None))
|
||||
self.groupBox_4.setTitle(QCoreApplication.translate("MainWindow", u"\ud45c\uc2dc\uc601\uc5ed", None))
|
||||
self.groupBox_5.setTitle(QCoreApplication.translate("MainWindow", u"1\ubc88 \uc0c1\ud488", None))
|
||||
self.sel_item11_2.setText(QCoreApplication.translate("MainWindow", u"\uc774\ub984", None))
|
||||
self.sel_item12_5.setText(QCoreApplication.translate("MainWindow", u"Tag", None))
|
||||
self.sel_item12_2.setText(QCoreApplication.translate("MainWindow", u"\ub9ac\ubdf0\uc218", None))
|
||||
self.sel_item12_3.setText(QCoreApplication.translate("MainWindow", u"\ucc1c\uc218", None))
|
||||
self.sel_item11.setText(QCoreApplication.translate("MainWindow", u"\uac00 \uaca9", None))
|
||||
self.sel_item12.setText(QCoreApplication.translate("MainWindow", u"\uad6c\ub9e4\uac74\uc218", None))
|
||||
self.groupBox_6.setTitle(QCoreApplication.translate("MainWindow", u"2\ubc88 \uc0c1\ud488", None))
|
||||
self.sel_item11_3.setText(QCoreApplication.translate("MainWindow", u"\uc774\ub984", None))
|
||||
self.sel_item12_6.setText(QCoreApplication.translate("MainWindow", u"Tag", None))
|
||||
self.sel_item12_7.setText(QCoreApplication.translate("MainWindow", u"\ub9ac\ubdf0\uc218", None))
|
||||
self.sel_item12_8.setText(QCoreApplication.translate("MainWindow", u"\ucc1c\uc218", None))
|
||||
self.sel_item11_4.setText(QCoreApplication.translate("MainWindow", u"\uac00 \uaca9", None))
|
||||
self.sel_item12_9.setText(QCoreApplication.translate("MainWindow", u"\uad6c\ub9e4\uac74\uc218", None))
|
||||
self.groupBox_7.setTitle(QCoreApplication.translate("MainWindow", u"3\ubc88 \uc0c1\ud488", None))
|
||||
self.sel_item11_5.setText(QCoreApplication.translate("MainWindow", u"\uc774\ub984", None))
|
||||
self.sel_item12_10.setText(QCoreApplication.translate("MainWindow", u"Tag", None))
|
||||
self.sel_item12_11.setText(QCoreApplication.translate("MainWindow", u"\ub9ac\ubdf0\uc218", None))
|
||||
self.sel_item12_12.setText(QCoreApplication.translate("MainWindow", u"\ucc1c\uc218", None))
|
||||
self.sel_item11_6.setText(QCoreApplication.translate("MainWindow", u"\uac00 \uaca9", None))
|
||||
self.sel_item12_13.setText(QCoreApplication.translate("MainWindow", u"\uad6c\ub9e4\uac74\uc218", None))
|
||||
self.groupBox_8.setTitle(QCoreApplication.translate("MainWindow", u"4\ubc88 \uc0c1\ud488", None))
|
||||
self.sel_item11_7.setText(QCoreApplication.translate("MainWindow", u"\uc774\ub984", None))
|
||||
self.sel_item12_14.setText(QCoreApplication.translate("MainWindow", u"Tag", None))
|
||||
self.sel_item12_15.setText(QCoreApplication.translate("MainWindow", u"\ub9ac\ubdf0\uc218", None))
|
||||
self.sel_item12_16.setText(QCoreApplication.translate("MainWindow", u"\ucc1c\uc218", None))
|
||||
self.sel_item11_8.setText(QCoreApplication.translate("MainWindow", u"\uac00 \uaca9", None))
|
||||
self.sel_item12_17.setText(QCoreApplication.translate("MainWindow", u"\uad6c\ub9e4\uac74\uc218", None))
|
||||
self.groupBox_9.setTitle(QCoreApplication.translate("MainWindow", u"5\ubc88 \uc0c1\ud488", None))
|
||||
self.sel_item11_9.setText(QCoreApplication.translate("MainWindow", u"\uc774\ub984", None))
|
||||
self.sel_item12_18.setText(QCoreApplication.translate("MainWindow", u"Tag", None))
|
||||
self.sel_item12_19.setText(QCoreApplication.translate("MainWindow", u"\ub9ac\ubdf0\uc218", None))
|
||||
self.sel_item12_20.setText(QCoreApplication.translate("MainWindow", u"\ucc1c\uc218", None))
|
||||
self.sel_item11_10.setText(QCoreApplication.translate("MainWindow", u"\uac00 \uaca9", None))
|
||||
self.sel_item12_21.setText(QCoreApplication.translate("MainWindow", u"\uad6c\ub9e4\uac74\uc218", None))
|
||||
self.urlgobtn.setText(QCoreApplication.translate("MainWindow", u"GO", None))
|
||||
self.groupBox_10.setTitle("")
|
||||
self.selkeyword.setText(QCoreApplication.translate("MainWindow", u"\ud604\uc7acitem(\uac00\uc9c0\uce58\uae30)", None))
|
||||
self.urlbox.setText(QCoreApplication.translate("MainWindow", u"http://naver.com", None))
|
||||
self.deliveryfee.setText(QCoreApplication.translate("MainWindow", u"\ubc30\uc1a1\ube44", None))
|
||||
self.addmargin.setText(QCoreApplication.translate("MainWindow", u"\ub354\ud558\uae30\ub9c8\uc9c4", None))
|
||||
self.addpackingfee.setText(QCoreApplication.translate("MainWindow", u"\ucd94\uac00\ud3ec\uc7a5\ube44", None))
|
||||
self.urlgobtn_2.setText(QCoreApplication.translate("MainWindow", u"GO", None))
|
||||
self.sel_item12_42.setText(QCoreApplication.translate("MainWindow", u"Tag", None))
|
||||
self.matchbtn.setText(QCoreApplication.translate("MainWindow", u"\ub9e4\uce6d", None))
|
||||
self.searchbtn_2.setText(QCoreApplication.translate("MainWindow", u"\ud0a4\uc6cc\ub4dc \uac80\uc0c9", None))
|
||||
self.switchBtn.setText(QCoreApplication.translate("MainWindow", u"PC-\ubaa8\ubc14\uc77c\n"
|
||||
"\uc804\ud658", None))
|
||||
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_1), QCoreApplication.translate("MainWindow", u"\ubaa8\ubc14\uc77c\ud0ed-\ud14d\uc2a4\ud2b8\uac80\uc0c9", None))
|
||||
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), QCoreApplication.translate("MainWindow", u"PC\ud0ed-\uc774\ubbf8\uc9c0\uac80\uc0c9", None))
|
||||
self.cat1.setText(QCoreApplication.translate("MainWindow", u"\uce74\ud14c\uace0\ub9ac 1", None))
|
||||
self.cat2.setText(QCoreApplication.translate("MainWindow", u"\uce74\ud14c\uace0\ub9ac 2", None))
|
||||
self.cat3.setText(QCoreApplication.translate("MainWindow", u"\uce74\ud14c\uace0\ub9ac 3", None))
|
||||
self.cat4.setText(QCoreApplication.translate("MainWindow", u"\uce74\ud14c\uace0\ub9ac 4", None))
|
||||
self.cat4_2.setText(QCoreApplication.translate("MainWindow", u"\uce74\ud14c\uace0\ub9ac \ucf54\ub4dc", None))
|
||||
self.img_searchbtn.setText(QCoreApplication.translate("MainWindow", u"\ud604\uc7ac \uc774\ubbf8\uc9c0 \uac80\uc0c9", None))
|
||||
self.backbtn.setText(QCoreApplication.translate("MainWindow", u"\ub4a4\ub85c", None))
|
||||
self.forwardbtn.setText(QCoreApplication.translate("MainWindow", u"\uc55e\uc73c\ub85c", None))
|
||||
self.loginUser.setText("")
|
||||
self.loginUserInfo.setText("")
|
||||
self.menu.setTitle(QCoreApplication.translate("MainWindow", u"\ud30c\uc77c", None))
|
||||
self.menu_2.setTitle(QCoreApplication.translate("MainWindow", u"\uc124\uc815", None))
|
||||
self.menu_3.setTitle(QCoreApplication.translate("MainWindow", u"\ub3c4\uc6c0\ub9d0", None))
|
||||
# retranslateUi
|
||||
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
import sys
|
||||
|
||||
from modules.login_widget import LoginWidget
|
||||
from modules.mongo_config import MongoConfig
|
||||
from modules.main_window import MainWindow
|
||||
|
||||
from PyQt5 import QtCore, QtWidgets
|
||||
from PyQt5.QtWidgets import QApplication
|
||||
|
||||
|
||||
|
||||
def main():
|
||||
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_ShareOpenGLContexts)
|
||||
app = QtWidgets.QApplication(sys.argv)
|
||||
mongo_config = MongoConfig() # MongoDB 설정 관리 인스턴스 생성
|
||||
mongo_config.try_connect(*mongo_config.load_config()) # MongoDB에 연결 시도
|
||||
# main_window = MainWindow(mongo_config) # 메인 윈도우 인스턴스 생성
|
||||
|
||||
login_widget = LoginWidget(mongo_config) # 로그인 위젯 생성, 메인 윈도우 인스턴스 전달
|
||||
login_widget.show() # 로그인 위젯 표시
|
||||
|
||||
|
||||
sys.exit(app.exec_())
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
app = QApplication(sys.argv)
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,114 @@
|
|||
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
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
from PyQt5 import QtWidgets, uic, QtWidgets
|
||||
|
||||
class SignUpWidget(QtWidgets.QWidget):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.initUI()
|
||||
# UI 파일 로드
|
||||
uic.loadUi('signup.ui', self)
|
||||
|
||||
def initUI(self):
|
||||
self.setWindowTitle("회원가입")
|
||||
layout = QtWidgets.QVBoxLayout()
|
||||
|
||||
# UI 구성 요소 추가 (이메일 입력, 비밀번호 입력, 약관 동의 등)
|
||||
|
||||
self.setLayout(layout)
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
import os
|
||||
|
||||
def create_user_directory_on_nas(self, email, now):
|
||||
base_path = "/volume1/Listup"
|
||||
user_name = email.split('@')[0] # 이메일에서 사용자 이름 추출
|
||||
year_folder = now.strftime('%Y년')
|
||||
month_folder = now.strftime('%m월')
|
||||
user_path = os.path.join(base_path, user_name, year_folder, month_folder)
|
||||
|
||||
# 해당 경로가 존재하지 않는 경우 생성
|
||||
if not os.path.exists(user_path):
|
||||
os.makedirs(user_path)
|
||||
print(f"NAS에서 디렉토리 생성: {user_path}")
|
||||
else:
|
||||
print(f"NAS에서 디렉토리 이미 존재: {user_path}")
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
[MongoDB]
|
||||
address = cckb9998.synology.me
|
||||
port = 27017
|
||||
user = root
|
||||
password = 1234
|
||||
|
||||
|
|
@ -0,0 +1,155 @@
|
|||
from collections import OrderedDict
|
||||
from PyQt5.QtWidgets import QTableView, QHeaderView
|
||||
from PyQt5.QtCore import Qt
|
||||
from PyQt5.QtGui import QStandardItemModel, QStandardItem
|
||||
from bson.objectid import ObjectId
|
||||
|
||||
class DataView(QTableView):
|
||||
|
||||
def __init__(self, mydb, dbviewer1):
|
||||
super().__init__()
|
||||
self.mydb = mydb
|
||||
self.dbviewer1 = dbviewer1
|
||||
print(f"class DataView 현재 DB상태 : {self.mydb}")
|
||||
|
||||
|
||||
def collect_data(self, selected_keyword_data):
|
||||
# 컬렉션 설정
|
||||
keywords_col = self.mydb["keywords"]
|
||||
print(f"keywords_col : {keywords_col}")
|
||||
naver_shopping_col = self.mydb["NaverShopping"]
|
||||
print(f"naver_shopping_col : {naver_shopping_col}")
|
||||
|
||||
print(f"넘겨받은 selected_keyword_data : {selected_keyword_data}")
|
||||
|
||||
|
||||
# keywords 컬렉션에서 키워드 정보 가져오기
|
||||
keyword_infos = keywords_col.find({"_id": {"$in": selected_keyword_data}})
|
||||
print(f"keyword_infos : {keyword_infos}")
|
||||
|
||||
|
||||
# try:
|
||||
# keyword_info = keywords_col.find_one({"_id": ObjectId(selected_keyword_data)})
|
||||
for keywords in keyword_infos:
|
||||
|
||||
# 키워드, 카테고리, state 정보 추출
|
||||
keyword = keywords["키워드"]
|
||||
print(f"keyword : {keyword}")
|
||||
category = keywords["카테고리"]
|
||||
print(f"category : {category}")
|
||||
state = keywords["state"]
|
||||
print(f"state : {state}")
|
||||
|
||||
|
||||
# 네이버쇼핑 컬렉션에서 키워드 ID 기반으로 상품 목록 가져오기
|
||||
products = naver_shopping_col.find({"keyword_id": {"$in": selected_keyword_data}})
|
||||
# print(f"네이버쇼핑 products : {products}")
|
||||
|
||||
# # products를 list로 변환
|
||||
# products_list = list(products)
|
||||
# print(f"네이버쇼핑 products_list : {products_list}")
|
||||
|
||||
# 상품 데이터 리스트
|
||||
product_list = []
|
||||
print("상품 데이터 리스트 초기화")
|
||||
|
||||
# 상품 데이터 루프 처리
|
||||
for product in products:
|
||||
# product_info = naver_shopping_col.find_one({"_id": product})
|
||||
# 상품 정보 추출
|
||||
print("상품 정보 추출")
|
||||
|
||||
product_id = product["_id"]
|
||||
productName = product["productName"]
|
||||
overseaTp = product["overseaTp"]
|
||||
keepCnt = product["keepCnt"]
|
||||
imageUrl = product["imageUrl"]
|
||||
price = product["price"]
|
||||
openDate = product["openDate"]
|
||||
rank = product["rank"]
|
||||
manuTag = product["manuTag"]
|
||||
reviewCountSum = product["reviewCountSum"]
|
||||
dlvryPrice = product["dlvryPrice"]
|
||||
purchaseCnt = product["purchaseCnt"]
|
||||
|
||||
# 상품 정보 OrderedDict에 저장
|
||||
product_dict = OrderedDict([
|
||||
("키워드", keyword),
|
||||
("BASE카테고리", category),
|
||||
("상품명", productName),
|
||||
("해외배송여부", overseaTp),
|
||||
("찜수", keepCnt),
|
||||
("리뷰수", reviewCountSum),
|
||||
("구매건수", purchaseCnt),
|
||||
("가격", price),
|
||||
("배송비포함가격", dlvryPrice),
|
||||
("등록일", openDate),
|
||||
("순위", rank),
|
||||
("상품태그", manuTag),
|
||||
("이미지주소", imageUrl),
|
||||
("상태", state),
|
||||
("상품 ID", product_id),
|
||||
])
|
||||
|
||||
# 상품 정보 리스트에 추가
|
||||
product_list.append(product_dict)
|
||||
|
||||
print(f"product_list : {product_list}")
|
||||
return product_list
|
||||
# self.show_viewer(product_list)
|
||||
|
||||
|
||||
def show_viewer11(self, product_list):
|
||||
# QTableView 객체 생성
|
||||
# dbViewer1 = QTableView()
|
||||
# dbViewer1 = self.findChild(QTableView, "dbViewer1")
|
||||
|
||||
if not product_list: # product_list가 비어있는 경우 처리
|
||||
print("product_list가 비어있습니다.")
|
||||
return
|
||||
|
||||
# 모델 생성 및 데이터 설정
|
||||
model = QStandardItemModel(len(product_list), len(product_list[0]))
|
||||
for row, product_data in enumerate(product_list):
|
||||
for col, value in enumerate(product_data.values()):
|
||||
item = QStandardItem(str(value))
|
||||
model.setItem(row, col, item)
|
||||
|
||||
# 헤더 설정
|
||||
headers = list(product_list[0].keys())
|
||||
model.setHorizontalHeaderLabels(headers) # 컬럼 헤더 제목 설정
|
||||
|
||||
# MainTao.ui 파일에서 dbViewer1 객체 참조
|
||||
self.dbviewer1 = self.findChild(QTableView, "dbviewer1")
|
||||
|
||||
# 모델을 QTableView에 설정
|
||||
self.dbviewer1.setModel(model)
|
||||
|
||||
# 헤더 가로 크기 조절 방식 설정
|
||||
for i in range(len(headers)):
|
||||
self.dbviewer1.horizontalHeader().setSectionResizeMode(i, QHeaderView.Stretch)
|
||||
|
||||
# QTableView 표시
|
||||
self.dbviewer1.show()
|
||||
|
||||
def show_viewer(self, product_list):
|
||||
if not product_list:
|
||||
print("No products to display.")
|
||||
return
|
||||
|
||||
# Create a model for the QTableView
|
||||
model = QStandardItemModel()
|
||||
|
||||
# Assuming product_list is a list of dictionaries, where each dictionary represents a product
|
||||
if product_list:
|
||||
# Set model headers using the keys from the first item in product_list
|
||||
model.setHorizontalHeaderLabels(list(product_list[0].keys()))
|
||||
|
||||
for product in product_list:
|
||||
# Create a list of QStandardItems from product values
|
||||
row = [QStandardItem(str(value)) for value in product.values()]
|
||||
model.appendRow(row)
|
||||
|
||||
self.dbviewer1.setModel(model)
|
||||
self.dbviewer1.horizontalHeader().setStretchLastSection(True)
|
||||
self.dbviewer1.resizeColumnsToContents()
|
||||
|
|
@ -0,0 +1,129 @@
|
|||
import sys
|
||||
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton, QMessageBox, QCheckBox
|
||||
from pymongo import MongoClient
|
||||
from modules.mongo_config import MongoConfig
|
||||
from configparser import ConfigParser
|
||||
from pymongo.errors import ConnectionFailure
|
||||
from PyQt5.QtCore import Qt
|
||||
|
||||
class MongoConnectionWidget(QWidget):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.mongoConfig = MongoConfig()
|
||||
self.initUI()
|
||||
|
||||
def initUI(self):
|
||||
self.setGeometry(780, 420, 360, 240)
|
||||
|
||||
layout = QVBoxLayout()
|
||||
|
||||
self.infoLabel = QLabel("사용자 로그인 정보를 입력하세요")
|
||||
|
||||
self.infoLabel = QLabel("서버 정보를 입력하세요:")
|
||||
self.addressInput = QLineEdit("qcy2.duckdns.org")
|
||||
self.addressInput.setPlaceholderText("서버 주소 (예: www.naver.com)")
|
||||
self.addressInput.returnPressed.connect(self.focus_to_port_input)
|
||||
|
||||
self.portInput = QLineEdit("27017")
|
||||
self.portInput.setPlaceholderText("서버 포트 (예: 27017)")
|
||||
self.portInput.returnPressed.connect(self.focus_to_user_input)
|
||||
|
||||
self.userInput = QLineEdit("root")
|
||||
self.userInput.setPlaceholderText("사용자 이름")
|
||||
self.userInput.returnPressed.connect(self.focus_to_password_input)
|
||||
|
||||
self.passwordInput = QLineEdit("1234")
|
||||
self.passwordInput.setPlaceholderText("비밀번호")
|
||||
self.passwordInput.setEchoMode(QLineEdit.Password)
|
||||
self.passwordInput.returnPressed.connect(self.try_connect)
|
||||
|
||||
# 비밀번호 표시 토글 버튼
|
||||
self.showPasswordCheckBox = QCheckBox("비밀번호 표시")
|
||||
self.showPasswordCheckBox.stateChanged.connect(self.togglePasswordVisibility)
|
||||
|
||||
self.connectButton = QPushButton("접속하기")
|
||||
self.connectButton.clicked.connect(self.try_connect)
|
||||
|
||||
layout.addWidget(self.infoLabel)
|
||||
layout.addWidget(self.addressInput)
|
||||
layout.addWidget(self.portInput)
|
||||
layout.addWidget(self.userInput)
|
||||
layout.addWidget(self.passwordInput)
|
||||
layout.addWidget(self.showPasswordCheckBox)
|
||||
layout.addWidget(self.connectButton)
|
||||
|
||||
|
||||
self.setLayout(layout)
|
||||
self.setWindowTitle('데이터베이스 연결 설정')
|
||||
|
||||
def focus_to_user_input(self):
|
||||
self.userInput.setFocus()
|
||||
|
||||
def focus_to_port_input(self):
|
||||
self.portInput.setFocus()
|
||||
|
||||
def focus_to_password_input(self):
|
||||
self.passwordInput.setFocus()
|
||||
|
||||
def togglePasswordVisibility(self, state):
|
||||
if state == Qt.Checked:
|
||||
self.passwordInput.setEchoMode(QLineEdit.Normal)
|
||||
else:
|
||||
self.passwordInput.setEchoMode(QLineEdit.Password)
|
||||
|
||||
def load_config_and_try_connect(self):
|
||||
config = ConfigParser()
|
||||
config.read('config.ini')
|
||||
if config.has_section('MongoDB'):
|
||||
address = config.get('MongoDB', 'address')
|
||||
port = config.get('MongoDB', 'port')
|
||||
user = config.get('MongoDB', 'user')
|
||||
password = config.get('MongoDB', 'password')
|
||||
return self.try_connect_with_config(address, port, user, password)
|
||||
return False
|
||||
|
||||
def try_connect_with_config(self, address, port, user, password):
|
||||
try:
|
||||
client = MongoClient(f'mongodb://{user}:{password}@{address}:{port}/')
|
||||
client.admin.command('ping') # 접속 확인
|
||||
return True, "접속 성공"
|
||||
except ConnectionFailure as e:
|
||||
# ConnectionFailure 예외 발생 시 에러 메시지 포착
|
||||
error_message = str(e.details) if hasattr(e, 'details') else str(e)
|
||||
return False, f"접속 실패: {error_message}"
|
||||
except Exception as e:
|
||||
# 기타 예외 처리
|
||||
return False, f"접속 실패: {str(e)}"
|
||||
|
||||
def try_connect(self):
|
||||
address = self.addressInput.text()
|
||||
port = self.portInput.text()
|
||||
user = self.userInput.text()
|
||||
password = self.passwordInput.text()
|
||||
success, message = self.try_connect_with_config(address, port, user, password)
|
||||
if success:
|
||||
QMessageBox.information(self, "성공", message)
|
||||
self.save_config(address, port, user, password)
|
||||
self.proceed_to_main_program()
|
||||
else:
|
||||
QMessageBox.warning(self, "실패", message)
|
||||
|
||||
def save_config(self, address, port, user, password):
|
||||
config = ConfigParser()
|
||||
config['MongoDB'] = {
|
||||
'address': address,
|
||||
'port': port,
|
||||
'user': user,
|
||||
'password': password
|
||||
}
|
||||
with open('config.ini', 'w') as configfile:
|
||||
config.write(configfile)
|
||||
|
||||
#def main():
|
||||
# app = QApplication(sys.argv)
|
||||
# ex = MongoConnectionWidget()
|
||||
# ex.show()
|
||||
# sys.exit(app.exec_())
|
||||
|
||||
#if __name__ == '__main__':
|
||||
# main()
|
||||
|
|
@ -0,0 +1,224 @@
|
|||
from werkzeug.security import check_password_hash
|
||||
from PyQt5.QtCore import Qt, QSettings
|
||||
from PyQt5 import QtWidgets, QtCore, QtWidgets
|
||||
from datetime import datetime
|
||||
import sys
|
||||
from modules.SignUpWidget import SignUpWidget
|
||||
from modules.main_window import MainWindow
|
||||
|
||||
class LoginWidget(QtWidgets.QWidget):
|
||||
def __init__(self, mongo_config):
|
||||
super().__init__()
|
||||
self.mongoConfig = mongo_config
|
||||
self.client = mongo_config.client
|
||||
|
||||
# self.login_db = self.mongoConfig.get_db() # mongo_config 인스턴스를 통해 데이터베이스 객체를 가져옴
|
||||
self.login_db = self.client['taobao_project']
|
||||
self.initUI()
|
||||
# Initialize MongoDB client and select database
|
||||
self.loadSettings()
|
||||
master_email = "로그인 하세요"
|
||||
|
||||
def initUI(self):
|
||||
self.setGeometry(780, 420, 240, 200)
|
||||
|
||||
layout = QtWidgets.QVBoxLayout()
|
||||
|
||||
|
||||
self.signupButton = QtWidgets.QPushButton("회원 가입")
|
||||
self.signupButton.clicked.connect(self.showSignUpWindow)
|
||||
|
||||
self.infoLabel = QtWidgets.QLabel("로그인 정보를 입력하세요")
|
||||
|
||||
self.emailInput = QtWidgets.QLineEdit()
|
||||
self.emailInput.setPlaceholderText("사용자 이름(이메일형식)")
|
||||
self.emailInput.returnPressed.connect(self.focusToPassword) # 사용자 이름에서 엔터 -> 암호칸으로 포커스
|
||||
|
||||
self.passwordInput = QtWidgets.QLineEdit()
|
||||
self.passwordInput.setPlaceholderText("비밀번호")
|
||||
self.passwordInput.setEchoMode(QtWidgets.QLineEdit.Password)
|
||||
self.passwordInput.returnPressed.connect(self.login) # 암호에서 엔터 -> 로그인 시도
|
||||
|
||||
# 비밀번호 표시 토글 버튼
|
||||
self.showPasswordCheckBox = QtWidgets.QCheckBox("비밀번호 표시")
|
||||
self.showPasswordCheckBox.stateChanged.connect(self.togglePasswordVisibility)
|
||||
|
||||
self.loginButton = QtWidgets.QPushButton("로그인")
|
||||
self.loginButton.clicked.connect(self.login)
|
||||
|
||||
layout.addWidget(self.signupButton)
|
||||
layout.addWidget(self.infoLabel)
|
||||
layout.addWidget(self.emailInput)
|
||||
layout.addWidget(self.passwordInput)
|
||||
layout.addWidget(self.showPasswordCheckBox)
|
||||
layout.addWidget(self.loginButton)
|
||||
|
||||
self.setLayout(layout)
|
||||
self.setWindowTitle('로그인')
|
||||
|
||||
def togglePasswordVisibility(self):
|
||||
if self.showPasswordCheckBox.isChecked():
|
||||
self.passwordInput.setEchoMode(QtWidgets.QLineEdit.Normal)
|
||||
else:
|
||||
self.passwordInput.setEchoMode(QtWidgets.QLineEdit.Password)
|
||||
|
||||
def focusToPassword(self):
|
||||
self.passwordInput.setFocus()
|
||||
|
||||
def saveSettings(self, email, password):
|
||||
settings = QSettings("혜리수샵", "쏘서러")
|
||||
settings.setValue("email", email)
|
||||
settings.setValue("password", password)
|
||||
|
||||
def loadSettings(self):
|
||||
settings = QSettings("혜리수샵", "쏘서러")
|
||||
email = settings.value("email", "")
|
||||
password = settings.value("password", "")
|
||||
self.emailInput.setText(email)
|
||||
self.passwordInput.setText(password)
|
||||
|
||||
|
||||
def login(self):
|
||||
email = self.emailInput.text()
|
||||
password = self.passwordInput.text()
|
||||
|
||||
# MongoDB에서 사용자 문서 조회
|
||||
user_doc = self.login_db.users.find_one({"email": email})
|
||||
|
||||
if user_doc and check_password_hash(user_doc['password'], password):
|
||||
# 비밀번호 검증 성공
|
||||
self.email = email # 여기에서 사용자 이메일을 self.email 속성에 저장
|
||||
|
||||
# 마지막 로그아웃 시간, 총 작업량, 주별 및 월별 성과 조회
|
||||
last_logout = user_doc.get('lastLogoutTime', '기록 없음')
|
||||
total_workload = user_doc.get('totalWorkload', 0)
|
||||
weekly_performance = user_doc.get('weeklyPerformance', {})
|
||||
monthly_performance = user_doc.get('monthlyPerformance', {})
|
||||
performance_msg = f"\n마지막 로그아웃 시간: {last_logout}\n마지막 작업량: {total_workload}\n주간성과: {weekly_performance}\n월간성과: {monthly_performance}"
|
||||
|
||||
#QtWidgets.QMessageBox.information(self, "로그인 성공", performance_msg)
|
||||
|
||||
if user_doc['userType'] in ['slave', 'manager']:
|
||||
master_email = user_doc.get('master', None)
|
||||
QtWidgets.QMessageBox.information(self, "로그인 성공", f"{master_email} 데이터베이스를 사용합니다.\n{performance_msg}")
|
||||
else:
|
||||
QtWidgets.QMessageBox.information(self, "로그인 성공", f"{email} 데이터베이스를 사용합니다.\n{performance_msg}")
|
||||
|
||||
self.saveSettings(email, password) # 로그인 성공 시 설정 저장
|
||||
|
||||
now = datetime.now()
|
||||
|
||||
self.login_db.users.update_one(
|
||||
{"email": email},
|
||||
{"$set": {"lastLoginTime": now.strftime('%Y-%m-%d %H:%M:%S')}}
|
||||
)
|
||||
|
||||
self.on_login_success()
|
||||
else:
|
||||
# 로그인 실패
|
||||
QtWidgets.QMessageBox.warning(self, "로그인 실패", "이메일 또는 비밀번호가 잘못되었습니다.")
|
||||
|
||||
def on_login_success(self):
|
||||
# MongoDB에서 사용자 문서 조회
|
||||
user_doc = self.login_db.users.find_one({"email": self.email})
|
||||
if user_doc['userType'] == 'master':
|
||||
# 마스터 사용자 정보 표시
|
||||
userInfo = f"등급: {user_doc['userGrade']}, 플랜 종료일: {user_doc['planEndDate']}"
|
||||
# 종속된 사용자 정보 조회 및 표시
|
||||
dependent_users = self.login_db.users.find({"master": user_doc['email']})
|
||||
print(dependent_users)
|
||||
#dependent_users = self.login_db.users.find({"master": self.email}) # 수정된 부분: user_doc['email'] 대신 self.email 사용
|
||||
for user in dependent_users:
|
||||
last_login = user.get('lastLoginTime', '로그인 기록 없음')
|
||||
total_workload = user.get('totalWorkload', 0)
|
||||
userInfo += f"\n종속 사용자: {user['email']}, 마지막 로그인: {last_login}, 총 작업량: {total_workload}"
|
||||
elif user_doc['userType'] in ['slave', 'manager']:
|
||||
userInfo = "해당 정보는 마스터 사용자만 볼 수 있습니다."
|
||||
|
||||
main_window = MainWindow(self.mongoConfig, self.email, userInfo)
|
||||
|
||||
if main_window:
|
||||
main_window.set_user_email(self.email) # 메인 윈도우의 메서드를 호출하여 현재 로그인된 사용자 표시
|
||||
main_window.set_User_Info(userInfo) # 메인 윈도우의 메서드를 호출하여 현재 로그인된 사용자 표시
|
||||
|
||||
# 메인 윈도우를 클래스 멤버 변수에 할당
|
||||
self.main_window = main_window
|
||||
|
||||
self.close() # 로그인 창 닫기
|
||||
main_window.show() # 메인 윈도우 표시
|
||||
# sys.exit()
|
||||
# self.close() # 로그인 창 닫기
|
||||
|
||||
def find_master_username(self, slave_username):
|
||||
# 실제 애플리케이션에서는 여기서 MongoDB를 조회하여 master 사용자를 찾아야 합니다.
|
||||
# 이 예시에서는 단순화를 위해 'master' 문자열을 반환합니다.
|
||||
return self.master_email
|
||||
|
||||
def login_user(self, email, password):
|
||||
# 로그인 검증 로직 (생략)
|
||||
now = datetime.now()
|
||||
self.login_db.users.update_one(
|
||||
{"email": email},
|
||||
{"$set": {"lastLoginTime": now.strftime('%Y-%m-%d %H:%M:%S')}}
|
||||
)
|
||||
# 로그인 성공 메시지와 마지막 로그아웃 시간 표시 (구현 필요)
|
||||
|
||||
def logout(self, email):
|
||||
print("로그아웃 프로세스 시작")
|
||||
now = datetime.now()
|
||||
# 로그아웃 시간 업데이트
|
||||
self.login_db.users.update_one(
|
||||
{"email": email},
|
||||
{"$set": {"lastLogoutTime": now.strftime('%Y-%m-%d %H:%M:%S')}}
|
||||
)
|
||||
print(f"사용자 {email}의 로그아웃 시간이 기록되었습니다.")
|
||||
# 변경된 문서 다시 조회
|
||||
user_doc = self.login_db.users.find_one({"email": email})
|
||||
|
||||
# 성과 메시지 생성
|
||||
performance_msg = self.create_performance_message(user_doc)
|
||||
|
||||
# 로그아웃 메시지 박스 표시 및 5초 후 자동 닫기
|
||||
msgBox = QtWidgets.QMessageBox(self)
|
||||
msgBox.setWindowTitle("로그아웃")
|
||||
msgBox.setText("성공적으로 로그아웃되었습니다.\n" + performance_msg)
|
||||
msgBox.setStandardButtons(QtWidgets.QMessageBox.Ok)
|
||||
msgBox.buttonClicked.connect(msgBox.close)
|
||||
|
||||
QTimer = QtCore.QTimer(self)
|
||||
QTimer.singleShot(3000, msgBox.close) # 5초 후 자동 닫기
|
||||
msgBox.exec_()
|
||||
|
||||
|
||||
def show_user_performance(self, email):
|
||||
user_doc = self.login_db.users.find_one({"email": email}, {"totalWorkload": 1, "weeklyPerformance": 1, "monthlyPerformance": 1})
|
||||
if user_doc:
|
||||
print(f"총 작업량: {user_doc.get('totalWorkload', 0)}")
|
||||
print("주별 성과:")
|
||||
for week, workload in user_doc.get("weeklyPerformance", {}).items():
|
||||
print(f"{week}: {workload}")
|
||||
print("월별 성과:")
|
||||
for month, workload in user_doc.get("monthlyPerformance", {}).items():
|
||||
print(f"{month}: {workload}")
|
||||
|
||||
|
||||
def create_performance_message(self, user_doc):
|
||||
# 마지막 로그아웃 시간, 총 작업량, 주별 및 월별 성과 조회
|
||||
last_logout = user_doc.get('lastLogoutTime', '기록 없음')
|
||||
total_workload = user_doc.get('totalWorkload', 0)
|
||||
weekly_performance = user_doc.get('weeklyPerformance', {})
|
||||
monthly_performance = user_doc.get('monthlyPerformance', {})
|
||||
|
||||
performance_msg = f"마지막 로그아웃 시간: {last_logout}\n총 작업량: {total_workload}\n"
|
||||
|
||||
for week, workload in weekly_performance.items():
|
||||
performance_msg += f"주별 성과 ({week}): {workload}\n"
|
||||
for month, workload in monthly_performance.items():
|
||||
performance_msg += f"월별 성과 ({month}): {workload}\n"
|
||||
|
||||
return performance_msg
|
||||
|
||||
|
||||
def showSignUpWindow(self):
|
||||
self.signUpWidget = SignUpWidget()
|
||||
self.signUpWidget.show()
|
||||
|
|
@ -0,0 +1,209 @@
|
|||
import sys
|
||||
from datetime import datetime
|
||||
|
||||
#from modules.keyword_management import add_keyword
|
||||
#from modules.product_parsing import parse_naver_shopping
|
||||
#from modules.matching_operations import save_matching_info
|
||||
from modules.pandas_data import PandasModel
|
||||
from modules.spinBox import CustomSpinBox
|
||||
from modules.webPage import CustomWebEnginePage
|
||||
from modules.dbConnect import MongoConnectionWidget
|
||||
from modules.login_widget import LoginWidget
|
||||
from modules.mongo_config import MongoConfig
|
||||
from modules.DBList import DbDialog
|
||||
|
||||
|
||||
from PyQt5 import QtCore, QtWidgets, uic
|
||||
from PyQt5.QtWidgets import QApplication
|
||||
from PyQt5.QtWidgets import QApplication, QFileDialog, QTableWidgetItem, QLabel, QMainWindow, QTableView, QVBoxLayout, QWidget, QComboBox, QMessageBox, QGraphicsScene, QGraphicsPixmapItem, QDialogButtonBox, QInputDialog, QMessageBox, QTabWidget, QSpinBox
|
||||
from PyQt5.QtCore import Qt, QUrl, pyqtSignal, QAbstractTableModel, QTimer, QObject, pyqtSlot, QEvent, QUrl, QTimer
|
||||
from PyQt5.QtWebEngineWidgets import QWebEngineProfile
|
||||
|
||||
from pymongo import MongoClient
|
||||
|
||||
class MainWindow(QtWidgets.QMainWindow):
|
||||
def __init__(self, mongo_config, email, user_info):
|
||||
super(MainWindow, self).__init__()
|
||||
# UI 파일 로드
|
||||
uic.loadUi('MainTao.ui', self)
|
||||
self.mongo_config = mongo_config
|
||||
self.client = self.mongo_config.client
|
||||
|
||||
|
||||
self.currentUserEmail = email
|
||||
self.currentUserInfo = user_info
|
||||
|
||||
if self.currentUserEmail:
|
||||
# 사용자 이메일 기반 데이터베이스 설정
|
||||
user_id = self.currentUserEmail.split('@')[0]
|
||||
Listup_user_id = 'Listup_id_' + user_id
|
||||
self.mydb = self.client[Listup_user_id]
|
||||
|
||||
|
||||
|
||||
# # 데이터베이스 선택
|
||||
# self.logindb = self.client['taobao_project']
|
||||
now = datetime.now()
|
||||
|
||||
# 컬렉션(테이블) 선택, 없으면 생성
|
||||
#collection = self.db['컬렉션명']
|
||||
self.loginUser.setText("로그인 되지 않음")
|
||||
#self.login_widget = LoginWidget() # login_widget 인스턴스 저장
|
||||
self.currentUserEmail = None # 사용자 이메일 주소를 저장할 멤버 변수 초기화
|
||||
self.currentUserInfo = None # 사용자 정보를 저장할 멤버 변수 초기화
|
||||
self.mydb = None
|
||||
|
||||
self.login_widget = LoginWidget(mongo_config, self) # LoginWidget 인스턴스 생성 및 저장
|
||||
|
||||
self.count_test1 = 0
|
||||
self.count_test2 = 0
|
||||
self.papago_client_id =""
|
||||
self.papago_client_secret = ""
|
||||
self.tao_id = "id_input"
|
||||
self.tao_pw = "password_input"
|
||||
|
||||
# DB 목록 선택 Dialog 객체 생성
|
||||
self.db_dialog = DbDialog(self.mydb)
|
||||
|
||||
#self.img_searchbtn.clicked.connect(self.img_search)
|
||||
#self.Excel_btn.clicked.connect(self.openxls)
|
||||
#self.matchbtn.clicked.connect(self.matchbtn_clicked)
|
||||
#self.webEngineView.urlChanged.connect(self.update_url)
|
||||
#self.dbviewer1.clicked.connect(self.on_table_clicked)
|
||||
#self.sc_button.clicked.connect(self.on_button_clicked)
|
||||
#self.papagoApi.clicked.connect(self.manage_papago_api_keys)
|
||||
|
||||
# 프로그램 초기화 부분에 API 키 관리 함수 호출
|
||||
#self.manage_papago_api_keys()
|
||||
# 초기 탭 설정
|
||||
self.tabWidget.setCurrentIndex(0) # 첫 번째 탭을 활성화
|
||||
|
||||
# 페이지 설정
|
||||
profile = QWebEngineProfile.defaultProfile()
|
||||
|
||||
# webEngineView에는 모바일 에이전트 설정
|
||||
self.webEngineView.setPage(CustomWebEnginePage(profile, self.webEngineView, use_mobile=True))
|
||||
print("webEngineView 페이지 설정 완료")
|
||||
# webEngineView_2에는 PC 에이전트 설정
|
||||
self.webEngineView_2.setPage(CustomWebEnginePage(profile, self.webEngineView_2, use_mobile=False))
|
||||
print("webEngineView_2 페이지 설정 완료")
|
||||
|
||||
# 스위치 UI 요소 (예: 버튼)에 이벤트 연결
|
||||
#self.switchBtn.clicked.connect(self.toggleUserAgent)
|
||||
|
||||
default_url = "https://main.m.taobao.com"
|
||||
default_url2 = "https://world.taobao.com/wow/tmg-fc/tmw/search_image?"
|
||||
self.webEngineView.load(QUrl(default_url))
|
||||
self.webEngineView_2.load(QUrl(default_url2))
|
||||
|
||||
# 기존DB불러오기 버튼 클릭이벤트
|
||||
self.db_btn.clicked.connect(self.show_db_dialog)
|
||||
|
||||
# db를 엑셀로 저장 버튼
|
||||
#self.export_btn.clicked.connect(self.export_data)
|
||||
|
||||
# 불러와진 DB에서 테이블을 읽어서 콤보박스에 표시하기
|
||||
#self.comboBox.currentIndexChanged.connect(self.loadTable)
|
||||
|
||||
#self.loadTableNames()
|
||||
|
||||
# QGraphicsScene 초기화
|
||||
self.scene = QGraphicsScene(self)
|
||||
self.scene_current_img = QGraphicsScene(self)
|
||||
|
||||
#self.current_img
|
||||
self.graphicsView_multi.setScene(self.scene)
|
||||
# QGraphicsView의 정렬을 상단 및 좌측에 맞추기
|
||||
self.graphicsView_multi.setAlignment(Qt.AlignTop)
|
||||
# 새로운 QGraphicsView 및 QGraphicsScene 초기화
|
||||
self.current_img.setScene(self.scene_current_img)
|
||||
|
||||
# searchbtn 버튼 클릭 이벤트 연결
|
||||
#self.searchbtn_2.clicked.connect(self.search_chinese)
|
||||
#self.search_keyword_box.returnPressed.connect(self.search_chinese)
|
||||
|
||||
# urlbox와 urlgobtn 이벤트 연결
|
||||
#self.urlbox.returnPressed.connect(self.load_url_from_urlbox)
|
||||
#self.urlgobtn.clicked.connect(self.load_url_from_urlbox)
|
||||
|
||||
# 타이머 설정
|
||||
self.timer = QTimer(self)
|
||||
#self.timer.timeout.connect(self.updateTimer)
|
||||
|
||||
# 시작, 정지, 설정 버튼
|
||||
#self.timerStart.clicked.connect(self.startTimer)
|
||||
#self.timerStop.clicked.connect(self.stopTimer)
|
||||
# self.timerSet.clicked.connect(self.setTimer)
|
||||
#self.startTimer()
|
||||
|
||||
# 타이머 시간
|
||||
self.remainingTime = 3600 # 초 단위 (60분)
|
||||
|
||||
# 기존 QSpinBox 객체를 CustomSpinBox 객체로 변환
|
||||
self.delivfee_spbox = self.findChild(QSpinBox, 'delivfee_spbox')
|
||||
self.addpackingfee_spbox = self.findChild(QSpinBox, 'addpackingfee_spbox')
|
||||
self.addmargin_spbox = self.findChild(QSpinBox, 'addmargin_spbox')
|
||||
|
||||
# QSpinBox 객체를 CustomSpinBox로 설정
|
||||
#self.updateSpinBox(self.delivfee_spbox, 1000)
|
||||
#self.updateSpinBox(self.addpackingfee_spbox, 1000)
|
||||
#self.updateSpinBox(self.addmargin_spbox, 1000)
|
||||
#기타 코드
|
||||
|
||||
def show_db_dialog(self):
|
||||
# DB 목록 선택 Dialog 실행
|
||||
self.db_dialog.exec_()
|
||||
|
||||
# 선택된 filename 값 처리
|
||||
selected_filename = self.db_dialog.get_selected_filename()
|
||||
if selected_filename:
|
||||
print(f"선택된 DB : {selected_filename}")
|
||||
# ...
|
||||
|
||||
|
||||
|
||||
def set_user_email(self, email):
|
||||
# 로그인된 사용자 이메일 설정
|
||||
self.loginUser.setText(f"로그인된 사용자: {email}")
|
||||
self.currentUserEmail = email
|
||||
|
||||
# 로그인된 사용자 이메일로 DATABASE 설정
|
||||
user_id = email.split('@')[0]
|
||||
Listup_user_id = 'Listup_id_' + user_id
|
||||
self.mydb = self.client[Listup_user_id]
|
||||
|
||||
|
||||
def set_User_Info(self, userInfo):
|
||||
self.loginUser.setText(f"로그인된 사용자: {self.currentUserEmail}")
|
||||
self.loginUserInfo.setText(f"{userInfo}")
|
||||
self.currentUserInfo = userInfo
|
||||
print(self.currentUserInfo)
|
||||
|
||||
|
||||
def closeEvent(self, event):
|
||||
"""메인 윈도우가 닫힐 때 호출되는 이벤트 핸들러."""
|
||||
if hasattr(self, 'login_widget'):
|
||||
self.login_widget.logout(self.currentUserEmail) # 로그아웃 처리
|
||||
super().closeEvent(event) # 기본 closeEvent 처리 호출
|
||||
|
||||
# 사용자에게 메시지 표시 등의 추가적인 처리를 할 수 있습니다.
|
||||
print("메인 윈도우가 닫히고 있습니다.")
|
||||
|
||||
def main():
|
||||
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_ShareOpenGLContexts)
|
||||
app = QtWidgets.QApplication(sys.argv)
|
||||
mongo_config = MongoConfig() # MongoDB 설정 관리 인스턴스 생성
|
||||
mongo_config.try_connect(*mongo_config.load_config()) # MongoDB에 연결 시도
|
||||
# main_window = MainWindow(mongo_config) # 메인 윈도우 인스턴스 생성
|
||||
|
||||
login_widget = LoginWidget(mongo_config) # 로그인 위젯 생성, 메인 윈도우 인스턴스 전달
|
||||
login_widget.show() # 로그인 위젯 표시
|
||||
|
||||
|
||||
sys.exit(app.exec_())
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
app = QApplication(sys.argv)
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,216 @@
|
|||
import sys
|
||||
from datetime import datetime
|
||||
|
||||
#from modules.keyword_management import add_keyword
|
||||
#from modules.product_parsing import parse_naver_shopping
|
||||
#from modules.matching_operations import save_matching_info
|
||||
from modules.pandas_data import PandasModel
|
||||
from modules.spinBox import CustomSpinBox
|
||||
from modules.webPage import CustomWebEnginePage
|
||||
# from modules.login_widget import LoginWidget
|
||||
from modules.mongo_config import MongoConfig
|
||||
from modules.DBList import DbDialog
|
||||
from modules.dataview import DataView
|
||||
|
||||
from PyQt5 import QtCore, QtWidgets, uic
|
||||
from PyQt5.QtWidgets import QApplication, QSpinBox, QGraphicsScene, QDialog, QTableView
|
||||
from PyQt5.QtCore import Qt, QUrl, QTimer, QUrl, QTimer
|
||||
from PyQt5.QtWebEngineWidgets import QWebEngineProfile
|
||||
|
||||
class MainWindow(QtWidgets.QMainWindow):
|
||||
def __init__(self, mongo_config, email, user_info):
|
||||
super(MainWindow, self).__init__()
|
||||
# UI 파일 로드
|
||||
uic.loadUi('MainTao.ui', self)
|
||||
self.mongo_config = mongo_config
|
||||
self.client = self.mongo_config.client
|
||||
|
||||
self.currentUserEmail = email
|
||||
self.currentUserInfo = user_info
|
||||
|
||||
if self.currentUserEmail:
|
||||
# 사용자 이메일 기반 데이터베이스 설정
|
||||
user_id = self.currentUserEmail.split('@')[0]
|
||||
Listup_user_id = 'Listup_id_' + user_id
|
||||
print(f"Listup_user_id : {Listup_user_id}")
|
||||
self.mydb = self.client[Listup_user_id]
|
||||
print(f"self.mydb : {self.mydb}")
|
||||
|
||||
|
||||
|
||||
# # 데이터베이스 선택
|
||||
# self.logindb = self.client['taobao_project']
|
||||
now = datetime.now()
|
||||
|
||||
# 컬렉션(테이블) 선택, 없으면 생성
|
||||
#collection = self.db['컬렉션명']
|
||||
self.loginUser.setText("로그인 되지 않음")
|
||||
#self.login_widget = LoginWidget() # login_widget 인스턴스 저장
|
||||
# self.currentUserEmail = None # 사용자 이메일 주소를 저장할 멤버 변수 초기화
|
||||
# self.currentUserInfo = None # 사용자 정보를 저장할 멤버 변수 초기화
|
||||
# self.mydb = None
|
||||
|
||||
# self.login_widget = LoginWidget(mongo_config, self) # LoginWidget 인스턴스 생성 및 저장
|
||||
|
||||
self.count_test1 = 0
|
||||
self.count_test2 = 0
|
||||
self.papago_client_id =""
|
||||
self.papago_client_secret = ""
|
||||
self.tao_id = "id_input"
|
||||
self.tao_pw = "password_input"
|
||||
|
||||
# DB 목록 선택 Dialog 객체 생성
|
||||
self.db_dialog = DbDialog(self.mydb)
|
||||
|
||||
#self.img_searchbtn.clicked.connect(self.img_search)
|
||||
#self.Excel_btn.clicked.connect(self.openxls)
|
||||
#self.matchbtn.clicked.connect(self.matchbtn_clicked)
|
||||
#self.webEngineView.urlChanged.connect(self.update_url)
|
||||
#self.dbviewer1.clicked.connect(self.on_table_clicked)
|
||||
#self.sc_button.clicked.connect(self.on_button_clicked)
|
||||
#self.papagoApi.clicked.connect(self.manage_papago_api_keys)
|
||||
# 프로그램 초기화 부분에 API 키 관리 함수 호출
|
||||
#self.manage_papago_api_keys()
|
||||
# 초기 탭 설정
|
||||
self.tabWidget.setCurrentIndex(0) # 첫 번째 탭을 활성화
|
||||
|
||||
# 페이지 설정
|
||||
profile = QWebEngineProfile.defaultProfile()
|
||||
|
||||
# webEngineView에는 모바일 에이전트 설정
|
||||
self.webEngineView.setPage(CustomWebEnginePage(profile, self.webEngineView, use_mobile=True))
|
||||
print("webEngineView 페이지 설정 완료")
|
||||
# webEngineView_2에는 PC 에이전트 설정
|
||||
self.webEngineView_2.setPage(CustomWebEnginePage(profile, self.webEngineView_2, use_mobile=False))
|
||||
print("webEngineView_2 페이지 설정 완료")
|
||||
|
||||
# 스위치 UI 요소 (예: 버튼)에 이벤트 연결
|
||||
#self.switchBtn.clicked.connect(self.toggleUserAgent)
|
||||
|
||||
default_url = "https://main.m.taobao.com"
|
||||
default_url2 = "https://world.taobao.com/wow/tmg-fc/tmw/search_image?"
|
||||
self.webEngineView.load(QUrl(default_url))
|
||||
self.webEngineView_2.load(QUrl(default_url2))
|
||||
|
||||
# DB불러오기 버튼 클릭이벤트
|
||||
self.db_btn.clicked.connect(self.show_db_dialog)
|
||||
|
||||
# db를 엑셀로 저장 버튼
|
||||
#self.export_btn.clicked.connect(self.export_data)
|
||||
|
||||
# 불러와진 DB에서 테이블을 읽어서 콤보박스에 표시하기
|
||||
#self.comboBox.currentIndexChanged.connect(self.loadTable)
|
||||
|
||||
#self.loadTableNames()
|
||||
|
||||
# QGraphicsScene 초기화
|
||||
self.scene = QGraphicsScene(self)
|
||||
self.scene_current_img = QGraphicsScene(self)
|
||||
|
||||
#self.current_img
|
||||
self.graphicsView_multi.setScene(self.scene)
|
||||
# QGraphicsView의 정렬을 상단 및 좌측에 맞추기
|
||||
self.graphicsView_multi.setAlignment(Qt.AlignTop)
|
||||
# 새로운 QGraphicsView 및 QGraphicsScene 초기화
|
||||
self.current_img.setScene(self.scene_current_img)
|
||||
|
||||
# searchbtn 버튼 클릭 이벤트 연결
|
||||
#self.searchbtn_2.clicked.connect(self.search_chinese)
|
||||
#self.search_keyword_box.returnPressed.connect(self.search_chinese)
|
||||
|
||||
# urlbox와 urlgobtn 이벤트 연결
|
||||
#self.urlbox.returnPressed.connect(self.load_url_from_urlbox)
|
||||
#self.urlgobtn.clicked.connect(self.load_url_from_urlbox)
|
||||
|
||||
# 타이머 설정
|
||||
self.timer = QTimer(self)
|
||||
#self.timer.timeout.connect(self.updateTimer)
|
||||
|
||||
# 시작, 정지, 설정 버튼
|
||||
#self.timerStart.clicked.connect(self.startTimer)
|
||||
#self.timerStop.clicked.connect(self.stopTimer)
|
||||
# self.timerSet.clicked.connect(self.setTimer)
|
||||
#self.startTimer()
|
||||
|
||||
# 타이머 시간
|
||||
self.remainingTime = 3600 # 초 단위 (60분)
|
||||
|
||||
# 기존 QSpinBox 객체를 CustomSpinBox 객체로 변환
|
||||
self.delivfee_spbox = self.findChild(QSpinBox, 'delivfee_spbox')
|
||||
self.addpackingfee_spbox = self.findChild(QSpinBox, 'addpackingfee_spbox')
|
||||
self.addmargin_spbox = self.findChild(QSpinBox, 'addmargin_spbox')
|
||||
|
||||
# QSpinBox 객체를 CustomSpinBox로 설정
|
||||
#self.updateSpinBox(self.delivfee_spbox, 1000)
|
||||
#self.updateSpinBox(self.addpackingfee_spbox, 1000)
|
||||
#self.updateSpinBox(self.addmargin_spbox, 1000)
|
||||
#기타 코드
|
||||
# self.selected_keyword_data = None
|
||||
|
||||
def show_db_dialog(self):
|
||||
# DB 목록 선택 Dialog 실행
|
||||
# selected_keyword_data = None
|
||||
|
||||
self.db_dialog = DbDialog(self.mydb)
|
||||
if self.db_dialog.exec_() == QDialog.Accepted:
|
||||
selected_keyword_data = self.db_dialog.selected_keyword_data
|
||||
print(f"선택된 selected_keyword_ids : {selected_keyword_data}")
|
||||
else:
|
||||
print("다이얼로그가 취소되었습니다.")
|
||||
|
||||
# print(f"선택된 selected_keyword_data : {self.selected_keyword_data}")
|
||||
|
||||
# dbViewer1 = self.findChild(QTableView, "dbViewer1")
|
||||
self.dataView = DataView(self.mydb, self.dbviewer1)
|
||||
product_list = self.dataView.collect_data(selected_keyword_data)
|
||||
# print(f"메인윈도우 product_list : {product_list}")
|
||||
|
||||
self.dataView.show_viewer(product_list)
|
||||
|
||||
# if self.selected_keyword_data:
|
||||
# print(f"선택된 self.selected_keyword_data : {self.selected_keyword_data}")
|
||||
# self.collect_data(self.selected_keyword_data, self.mydb)
|
||||
|
||||
|
||||
|
||||
def set_user_email(self, email):
|
||||
# 로그인된 사용자 이메일 설정
|
||||
self.loginUser.setText(f"로그인된 사용자: {email}")
|
||||
self.currentUserEmail = email
|
||||
|
||||
# 로그인된 사용자 이메일로 DATABASE 설정
|
||||
user_id = email.split('@')[0]
|
||||
Listup_user_id = 'Listup_id_' + user_id
|
||||
self.mydb = self.client[Listup_user_id]
|
||||
|
||||
|
||||
def set_User_Info(self, userInfo):
|
||||
self.loginUser.setText(f"로그인된 사용자: {self.currentUserEmail}")
|
||||
self.loginUserInfo.setText(f"{userInfo}")
|
||||
self.currentUserInfo = userInfo
|
||||
print(self.currentUserInfo)
|
||||
|
||||
|
||||
def closeEvent(self, event):
|
||||
"""메인 윈도우가 닫힐 때 호출되는 이벤트 핸들러."""
|
||||
if hasattr(self, 'login_widget'):
|
||||
self.login_widget.logout(self.currentUserEmail) # 로그아웃 처리
|
||||
super().closeEvent(event) # 기본 closeEvent 처리 호출
|
||||
|
||||
# 사용자에게 메시지 표시 등의 추가적인 처리를 할 수 있습니다.
|
||||
print("메인 윈도우가 닫히고 있습니다.")
|
||||
|
||||
def main():
|
||||
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_ShareOpenGLContexts)
|
||||
app = QtWidgets.QApplication(sys.argv)
|
||||
mongo_config = MongoConfig() # MongoDB 설정 관리 인스턴스 생성
|
||||
mongo_config.try_connect(*mongo_config.load_config()) # MongoDB에 연결 시도
|
||||
main_window = MainWindow(mongo_config) # 메인 윈도우 인스턴스 생성
|
||||
|
||||
sys.exit(app.exec_())
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
app = QApplication(sys.argv)
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
from pymongo import MongoClient
|
||||
from configparser import ConfigParser
|
||||
import os
|
||||
|
||||
class MongoConfig:
|
||||
_instance = None # 클래스 레벨의 인스턴스 변수
|
||||
def __new__(cls):
|
||||
if cls._instance is None:
|
||||
cls._instance = super(MongoConfig, cls).__new__(cls)
|
||||
cls._instance.init_config()
|
||||
return cls._instance
|
||||
|
||||
def init_config(self):
|
||||
self.config = ConfigParser()
|
||||
config_path = os.path.join(os.path.dirname(__file__), 'config.ini')
|
||||
self.config.read(config_path)
|
||||
print(config_path)
|
||||
self.client = None # MongoDB 클라이언트 초기화
|
||||
self.load_config()
|
||||
|
||||
def load_config(self):
|
||||
if not self.config.has_section('MongoDB'):
|
||||
raise Exception('서버 설정파일이 없습니다.config.ini 파일을 체크하세요.')
|
||||
if self.config.has_section('MongoDB'):
|
||||
address = self.config.get('MongoDB', 'address', fallback='localhost')
|
||||
port = self.config.get('MongoDB', 'port', fallback='27017')
|
||||
user = self.config.get('MongoDB', 'user', fallback='')
|
||||
password = self.config.get('MongoDB', 'password', fallback='')
|
||||
if not all([address, port, user, password]):
|
||||
raise Exception('Incomplete MongoDB configuration. Please check your config.ini file.')
|
||||
return address, port, user, password
|
||||
|
||||
|
||||
# def connect(self):
|
||||
# self.client = MongoClient(f'mongodb://{self.user}:{self.password}@{self.address}:{self.port}/')
|
||||
# self.db = self.client['taobao_project']
|
||||
|
||||
@staticmethod
|
||||
def get_db():
|
||||
return MongoConfig()._instance.db
|
||||
|
||||
def save_config(self, address, port, user, password):
|
||||
self.config['MongoDB'] = {
|
||||
'address': address,
|
||||
'port': port,
|
||||
'user': user,
|
||||
'password': password
|
||||
}
|
||||
with open('config.ini', 'w') as configfile:
|
||||
self.config.write(configfile)
|
||||
|
||||
def try_connect(self, address, port, user, password):
|
||||
address, port, user, password = self.load_config()
|
||||
print(f"{address},{port},{user},{password}")
|
||||
if not all([address, port, user, password]):
|
||||
print("Configuration missing. Please check your config.ini file.")
|
||||
return False
|
||||
try:
|
||||
self.client = MongoClient(f'mongodb://{user}:{password}@{address}:{port}/')
|
||||
self.db = self.client['taobao_project'] # 여기에서 추가 연결 확인 작업을 수행할 수 있습니다.
|
||||
print("MongoDB 연결 성공.")
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"MongoDB 연결 실패: {e}")
|
||||
return False
|
||||
|
||||
|
||||
def load_synology_config(self):
|
||||
# if not self.config.has_section('SynologyDrive'):
|
||||
# raise Exception('SynologyDrive 설정 섹션이 config.ini 파일에 없습니다.')
|
||||
# url = self.config.get('SynologyDrive', 'url', fallback='')
|
||||
# account = self.config.get('SynologyDrive', 'account', fallback='')
|
||||
# password = self.config.get('SynologyDrive', 'password', fallback='')
|
||||
# if not all([url, account, password]):
|
||||
# raise Exception('Incomplete SynologyDrive configuration in config.ini.')
|
||||
# self.synology_url = url
|
||||
# self.synology_account = account
|
||||
# self.synology_password = password
|
||||
if self.config.has_section('SynologyDrive'):
|
||||
url = self.config.get('SynologyDrive', 'url')
|
||||
account = self.config.get('SynologyDrive', 'account')
|
||||
password = self.config.get('SynologyDrive', 'password')
|
||||
return {'url': url, 'account': account, 'password': password}
|
||||
else:
|
||||
print("SynologyDrive 설정이 config.ini 파일에 없습니다.")
|
||||
return None # 여기서 None을 반환하는 대신, 적절한 기본값을 제공하거나 예외를 발생시키는 것을 고려해볼 수 있습니다.
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
from PyQt5.QtCore import QAbstractTableModel
|
||||
from PyQt5.QtGui import QColor
|
||||
from PyQt5.QtCore import Qt
|
||||
from PyQt5 import QtGui
|
||||
|
||||
class PandasModel(QAbstractTableModel):
|
||||
def __init__(self, data):
|
||||
QAbstractTableModel.__init__(self)
|
||||
self._data = data
|
||||
|
||||
def rowCount(self, parent=None):
|
||||
return self._data.shape[0]
|
||||
|
||||
def columnCount(self, parent=None):
|
||||
return self._data.shape[1]
|
||||
|
||||
def data(self, index, role):
|
||||
if not index.isValid():
|
||||
return None
|
||||
|
||||
# 배경색 변경
|
||||
if role == Qt.BackgroundColorRole:
|
||||
matching_url = self._data.iloc[index.row()]['MatchingUrl']
|
||||
if matching_url and matching_url.startswith('http'):
|
||||
return QColor('lightgray')
|
||||
if self.selected_cell == (index.row(), index.column()): # 선택된 셀
|
||||
return QColor('yellow')
|
||||
|
||||
# 폰트 변경
|
||||
if role == Qt.FontRole:
|
||||
current_row = index.row()
|
||||
current_keyword_id = self._data.iloc[current_row, 1]
|
||||
|
||||
# None 값 처리
|
||||
if current_keyword_id is None:
|
||||
current_keyword_id = ""
|
||||
|
||||
previous_keyword_id = ""
|
||||
if current_row > 0:
|
||||
previous_keyword_id = self._data.iloc[current_row - 1, 1]
|
||||
if previous_keyword_id is None:
|
||||
previous_keyword_id = ""
|
||||
|
||||
# 첫 번째 행이거나 이전 행보다 keyword_id가 큰 경우 폰트 스타일 변경
|
||||
if current_row == 0 or current_keyword_id > previous_keyword_id:
|
||||
font = QtGui.QFont()
|
||||
font.setBold(True)
|
||||
font.setUnderline(True)
|
||||
return font
|
||||
|
||||
# 기타 데이터 처리
|
||||
if role == Qt.DisplayRole:
|
||||
return str(self._data.iloc[index.row(), index.column()])
|
||||
|
||||
return None
|
||||
|
||||
def headerData(self, section, orientation, role):
|
||||
if role == Qt.DisplayRole:
|
||||
if orientation == Qt.Horizontal:
|
||||
return self._data.columns[section]
|
||||
else:
|
||||
return str(self._data.index[section])
|
||||
return None
|
||||
|
||||
def selected_cell(self, cell):
|
||||
self.selected_cell = cell
|
||||
self.layoutChanged.emit() # 뷰 업데이트
|
||||
|
||||
def update_selected_cell(self, cell):
|
||||
self.selected_cell = cell
|
||||
self.layoutChanged.emit() # 뷰 업데이트
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
from PyQt5.QtWidgets import QSpinBox
|
||||
|
||||
class CustomSpinBox(QSpinBox):
|
||||
def __init__(self, delta=1000, parent=None):
|
||||
super(CustomSpinBox, self).__init__(parent)
|
||||
self.delta = delta
|
||||
self.setSingleStep(self.delta)
|
||||
|
||||
def textFromValue(self, value):
|
||||
# 3자리 숫자마다 콤마를 찍는 로직
|
||||
return "{:,}".format(value)
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
|
||||
from datetime import datetime
|
||||
from synology_drive_api.drive import SynologyDrive
|
||||
import pandas as pd
|
||||
|
||||
# default http port is 5000, https is 5001.
|
||||
with SynologyDrive('ckh08045', 'Darknes1!', 'cckb9998.synology.me', '10002', https=False, dsm_version='7') as synd:
|
||||
# response = synd.create_folder('test1111', 'team-folders/Listup')
|
||||
# response = synd.list_folder('team-folders/Listup/')
|
||||
# synd.download_file('/team-folders/Listup/01.osheet') # write your code here
|
||||
# print(f"{response}")
|
||||
|
||||
# download osheet as xlsx and read into pandas dataframe.
|
||||
bio = synd.download_synology_office_file('/team-folders/Listup/01.osheet')
|
||||
# bio = synd.download_file('/mydrive/test.osheet')
|
||||
data = pd.read_excel(bio, sheet_name=None)
|
||||
|
||||
print(f"{data}")
|
||||
|
|
@ -0,0 +1,111 @@
|
|||
from datetime import datetime
|
||||
import requests
|
||||
|
||||
class SynologyFolderManager:
|
||||
def __init__(self, account, password, base_url):
|
||||
self.account = account
|
||||
self.password = password
|
||||
self.base_url = base_url
|
||||
self.session_id = None
|
||||
|
||||
def login(self):
|
||||
params = {
|
||||
'api': 'SYNO.API.Auth',
|
||||
'version': '7',
|
||||
'method': 'login',
|
||||
'account': self.account,
|
||||
'passwd': self.password,
|
||||
'session': 'FileStation',
|
||||
'format': 'sid'
|
||||
}
|
||||
resp = requests.get(f'{self.base_url}/webapi/auth.cgi', params=params)
|
||||
resp_json = resp.json()
|
||||
self.session_id = resp_json['data']['sid']
|
||||
|
||||
if resp.status_code == 200:
|
||||
result = resp.json()
|
||||
if result.get("success", False):
|
||||
self.session_id = result['data']['sid']
|
||||
print(f"Login successful. Session ID: {self.session_id}")
|
||||
else:
|
||||
print(f"Login failed. Response: {result}")
|
||||
else:
|
||||
print(f"HTTP error. Status code: {resp.status_code}. Response: {resp.text}")
|
||||
|
||||
def list_folder(self, folder_path):
|
||||
params = {
|
||||
'api': 'SYNO.FileStation.List',
|
||||
'version': '2',
|
||||
'method': 'list',
|
||||
'folder_path': folder_path,
|
||||
'_sid': self.session_id
|
||||
}
|
||||
response = requests.get(f'{self.base_url}/webapi/entry.cgi', params=params)
|
||||
|
||||
if response.status_code == 200:
|
||||
result = response.json()
|
||||
if result.get("success", False):
|
||||
print(f"Contents of {folder_path}:")
|
||||
for item in result['data']['files']:
|
||||
print(f"- {item['name']} ({'Folder' if item['isdir'] else 'File'})")
|
||||
else:
|
||||
error_code = result.get("error", {}).get("code", "")
|
||||
print(f"Failed to list folder contents. Error code: {error_code}.")
|
||||
else:
|
||||
print(f"Failed to communicate with Synology NAS. HTTP status code: {response.status_code}.")
|
||||
|
||||
|
||||
def create_folder(self, path, name):
|
||||
params = {
|
||||
'api': 'SYNO.FileStation.CreateFolder',
|
||||
'version': '2',
|
||||
'method': 'create',
|
||||
'folder_path': path,
|
||||
'name' : name,
|
||||
'_sid': self.session_id
|
||||
}
|
||||
response = requests.get(f'{self.base_url}/webapi/entry.cgi', params=params)
|
||||
|
||||
if response.status_code == 200:
|
||||
result = response.json()
|
||||
if result.get("success", False):
|
||||
print(f"Folder created successfully at {path}.")
|
||||
else:
|
||||
error_code = result.get("error", {}).get("code", "")
|
||||
print(f"Failed to create folder. Error code: {error_code}.")
|
||||
else:
|
||||
print(f"Failed to communicate with Synology NAS. HTTP status code: {response.status_code}.")
|
||||
|
||||
|
||||
def logout(self):
|
||||
params = {
|
||||
'api': 'SYNO.API.Auth',
|
||||
'version': '1',
|
||||
'method': 'logout',
|
||||
'session': 'FileStation',
|
||||
'_sid': self.session_id
|
||||
}
|
||||
requests.get(f'{self.base_url}/webapi/auth.cgi', params=params)
|
||||
|
||||
def create_user_directory(self, email):
|
||||
# 이메일에서 사용자 ID 추출
|
||||
user_id = email.split('@')[0]
|
||||
# 현재 날짜 기준 연도 및 월 폴더 이름 설정
|
||||
current_year = datetime.now().year
|
||||
current_month = datetime.now().month
|
||||
|
||||
# 사용자 기본 폴더 경로 구성
|
||||
base_path = "/volume1/Listup"
|
||||
user_path = f"/Listup_id_{user_id}"
|
||||
year_path = f"{user_path}/{current_year}"
|
||||
month_path = f"{year_path}/{current_month}"
|
||||
|
||||
# 사용자 폴더 생성
|
||||
self.drive.create_folder(user_path)
|
||||
# 연도별 폴더 생성
|
||||
self.drive.create_folder(year_path)
|
||||
# 월별 폴더 생성
|
||||
self.drive.create_folder(month_path)
|
||||
|
||||
print(f"{email}에 대한 폴더 생성 완료: {month_path}")
|
||||
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
from PyQt5.QtWebEngineWidgets import QWebEnginePage, QWebEngineSettings
|
||||
from PyQt5.QtCore import Qt, QUrl, QEvent, QUrl
|
||||
|
||||
class CustomWebEnginePage(QWebEnginePage):
|
||||
def __init__(self, profile, parent=None, use_mobile=False):
|
||||
super(CustomWebEnginePage, self).__init__(profile, parent)
|
||||
self.mobile_user_agent = "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1"
|
||||
self.desktop_user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
|
||||
self.setZoomFactor(0.75) # 줌을 75%로 설정
|
||||
#self.use_mobile_agent(False)
|
||||
#self.profile().setHttpUserAgent(mobile_user_agent)
|
||||
|
||||
if use_mobile:
|
||||
self.profile().setHttpUserAgent(self.mobile_user_agent)
|
||||
else:
|
||||
self.profile().setHttpUserAgent(self.desktop_user_agent)
|
||||
|
||||
# JavaScript 활성화
|
||||
settings = self.settings()
|
||||
settings.setAttribute(QWebEngineSettings.JavascriptEnabled, True)
|
||||
settings.setAttribute(QWebEngineSettings.JavascriptCanOpenWindows, True)
|
||||
settings.setAttribute(QWebEngineSettings.JavascriptCanAccessClipboard, True)
|
||||
|
||||
def use_mobile_agent(self, use_mobile):
|
||||
if use_mobile:
|
||||
self.profile().setHttpUserAgent(self.mobile_user_agent)
|
||||
else:
|
||||
self.profile().setHttpUserAgent(self.desktop_user_agent)
|
||||
self.parent().load(QUrl("https://world.taobao.com/wow/tmg-fc/tmw/search_image?spm="))
|
||||
|
||||
def event(self, event):
|
||||
if event.type() == QEvent.KeyPress and event.key() == Qt.Key_Backspace:
|
||||
self.triggerAction(QWebEnginePage.Back)
|
||||
return True
|
||||
return super().event(event)
|
||||
|
||||
def contextMenuEvent(self, event):
|
||||
menu = self.createStandardContextMenu()
|
||||
menu.addAction('Open Inspector', self.inspect)
|
||||
menu.exec_(event.globalPos())
|
||||
|
||||
def inspect(self):
|
||||
self.triggerAction(QWebEnginePage.InspectElement)
|
||||
|
||||
def keyPressEvent(self, event):
|
||||
if event.key() == Qt.Key_Backspace:
|
||||
self.back() # 백스페이스가 눌리면 이전 페이지로 이동
|
||||
else:
|
||||
super().keyPressEvent(event)
|
||||
|
|
@ -0,0 +1,193 @@
|
|||
import sys
|
||||
from datetime import datetime
|
||||
|
||||
#from modules.keyword_management import add_keyword
|
||||
#from modules.product_parsing import parse_naver_shopping
|
||||
#from modules.matching_operations import save_matching_info
|
||||
from modules.pandas_data import PandasModel
|
||||
from modules.spinBox import CustomSpinBox
|
||||
from modules.webPage import CustomWebEnginePage
|
||||
from modules.dbConnect import MongoConnectionWidget
|
||||
from modules.login_widget import LoginWidget
|
||||
from modules.mongo_config import MongoConfig
|
||||
from modules.DBList import DbDialog
|
||||
|
||||
|
||||
from PyQt5 import QtCore, QtWidgets, uic
|
||||
from PyQt5.QtWidgets import QApplication
|
||||
from PyQt5.QtWidgets import QApplication, QFileDialog, QTableWidgetItem, QLabel, QMainWindow, QTableView, QVBoxLayout, QWidget, QComboBox, QMessageBox, QGraphicsScene, QGraphicsPixmapItem, QDialogButtonBox, QInputDialog, QMessageBox, QTabWidget, QSpinBox
|
||||
from PyQt5.QtCore import Qt, QUrl, pyqtSignal, QAbstractTableModel, QTimer, QObject, pyqtSlot, QEvent, QUrl, QTimer
|
||||
from PyQt5.QtWebEngineWidgets import QWebEngineProfile
|
||||
|
||||
from pymongo import MongoClient
|
||||
|
||||
class MainWindow(QtWidgets.QMainWindow):
|
||||
def __init__(self, mongo_config):
|
||||
super(MainWindow, self).__init__()
|
||||
# UI 파일 로드
|
||||
uic.loadUi('MainTao.ui', self)
|
||||
self.mongo_config = mongo_config
|
||||
self.client = self.mongo_config.client
|
||||
# 데이터베이스 선택
|
||||
self.logindb = self.client['taobao_project']
|
||||
now = datetime.now()
|
||||
|
||||
# 컬렉션(테이블) 선택, 없으면 생성
|
||||
#collection = self.db['컬렉션명']
|
||||
self.loginUser.setText("로그인 되지 않음")
|
||||
#self.login_widget = LoginWidget() # login_widget 인스턴스 저장
|
||||
self.currentUserEmail = None # 사용자 이메일 주소를 저장할 멤버 변수 초기화
|
||||
self.currentUserInfo = None # 사용자 정보를 저장할 멤버 변수 초기화
|
||||
self.mydb = None
|
||||
|
||||
self.login_widget = LoginWidget(mongo_config, self) # LoginWidget 인스턴스 생성 및 저장
|
||||
|
||||
self.count_test1 = 0
|
||||
self.count_test2 = 0
|
||||
self.papago_client_id =""
|
||||
self.papago_client_secret = ""
|
||||
self.tao_id = "id_input"
|
||||
self.tao_pw = "password_input"
|
||||
|
||||
# DB 목록 선택 Dialog 객체 생성
|
||||
self.db_dialog = DbDialog(self.mydb)
|
||||
|
||||
#self.img_searchbtn.clicked.connect(self.img_search)
|
||||
#self.Excel_btn.clicked.connect(self.openxls)
|
||||
#self.matchbtn.clicked.connect(self.matchbtn_clicked)
|
||||
#self.webEngineView.urlChanged.connect(self.update_url)
|
||||
#self.dbviewer1.clicked.connect(self.on_table_clicked)
|
||||
#self.sc_button.clicked.connect(self.on_button_clicked)
|
||||
#self.papagoApi.clicked.connect(self.manage_papago_api_keys)
|
||||
|
||||
# 프로그램 초기화 부분에 API 키 관리 함수 호출
|
||||
#self.manage_papago_api_keys()
|
||||
# 초기 탭 설정
|
||||
self.tabWidget.setCurrentIndex(0) # 첫 번째 탭을 활성화
|
||||
|
||||
# 페이지 설정
|
||||
profile = QWebEngineProfile.defaultProfile()
|
||||
|
||||
# webEngineView에는 모바일 에이전트 설정
|
||||
self.webEngineView.setPage(CustomWebEnginePage(profile, self.webEngineView, use_mobile=True))
|
||||
print("webEngineView 페이지 설정 완료")
|
||||
# webEngineView_2에는 PC 에이전트 설정
|
||||
self.webEngineView_2.setPage(CustomWebEnginePage(profile, self.webEngineView_2, use_mobile=False))
|
||||
print("webEngineView_2 페이지 설정 완료")
|
||||
|
||||
# 스위치 UI 요소 (예: 버튼)에 이벤트 연결
|
||||
#self.switchBtn.clicked.connect(self.toggleUserAgent)
|
||||
|
||||
default_url = "https://main.m.taobao.com"
|
||||
default_url2 = "https://world.taobao.com/wow/tmg-fc/tmw/search_image?"
|
||||
self.webEngineView.load(QUrl(default_url))
|
||||
self.webEngineView_2.load(QUrl(default_url2))
|
||||
|
||||
# 기존DB불러오기 버튼 클릭이벤트
|
||||
self.db_btn.clicked.connect(self.show_db_dialog)
|
||||
|
||||
# db를 엑셀로 저장 버튼
|
||||
#self.export_btn.clicked.connect(self.export_data)
|
||||
|
||||
# 불러와진 DB에서 테이블을 읽어서 콤보박스에 표시하기
|
||||
#self.comboBox.currentIndexChanged.connect(self.loadTable)
|
||||
|
||||
#self.loadTableNames()
|
||||
|
||||
# QGraphicsScene 초기화
|
||||
self.scene = QGraphicsScene(self)
|
||||
self.scene_current_img = QGraphicsScene(self)
|
||||
|
||||
#self.current_img
|
||||
self.graphicsView_multi.setScene(self.scene)
|
||||
# QGraphicsView의 정렬을 상단 및 좌측에 맞추기
|
||||
self.graphicsView_multi.setAlignment(Qt.AlignTop)
|
||||
# 새로운 QGraphicsView 및 QGraphicsScene 초기화
|
||||
self.current_img.setScene(self.scene_current_img)
|
||||
|
||||
# searchbtn 버튼 클릭 이벤트 연결
|
||||
#self.searchbtn_2.clicked.connect(self.search_chinese)
|
||||
#self.search_keyword_box.returnPressed.connect(self.search_chinese)
|
||||
|
||||
# urlbox와 urlgobtn 이벤트 연결
|
||||
#self.urlbox.returnPressed.connect(self.load_url_from_urlbox)
|
||||
#self.urlgobtn.clicked.connect(self.load_url_from_urlbox)
|
||||
|
||||
# 타이머 설정
|
||||
self.timer = QTimer(self)
|
||||
#self.timer.timeout.connect(self.updateTimer)
|
||||
|
||||
# 시작, 정지, 설정 버튼
|
||||
#self.timerStart.clicked.connect(self.startTimer)
|
||||
#self.timerStop.clicked.connect(self.stopTimer)
|
||||
# self.timerSet.clicked.connect(self.setTimer)
|
||||
#self.startTimer()
|
||||
|
||||
# 타이머 시간
|
||||
self.remainingTime = 3600 # 초 단위 (60분)
|
||||
|
||||
# 기존 QSpinBox 객체를 CustomSpinBox 객체로 변환
|
||||
self.delivfee_spbox = self.findChild(QSpinBox, 'delivfee_spbox')
|
||||
self.addpackingfee_spbox = self.findChild(QSpinBox, 'addpackingfee_spbox')
|
||||
self.addmargin_spbox = self.findChild(QSpinBox, 'addmargin_spbox')
|
||||
|
||||
# QSpinBox 객체를 CustomSpinBox로 설정
|
||||
#self.updateSpinBox(self.delivfee_spbox, 1000)
|
||||
#self.updateSpinBox(self.addpackingfee_spbox, 1000)
|
||||
#self.updateSpinBox(self.addmargin_spbox, 1000)
|
||||
#기타 코드
|
||||
|
||||
def show_db_dialog(self):
|
||||
# DB 목록 선택 Dialog 실행
|
||||
self.db_dialog.exec_()
|
||||
|
||||
# 선택된 filename 값 처리
|
||||
selected_filename = self.db_dialog.get_selected_filename()
|
||||
if selected_filename:
|
||||
print(f"선택된 DB : {selected_filename}")
|
||||
# ...
|
||||
|
||||
|
||||
|
||||
def set_user_email(self, email):
|
||||
# 로그인된 사용자 이메일 설정
|
||||
self.loginUser.setText(f"로그인된 사용자: {email}")
|
||||
self.currentUserEmail = email
|
||||
|
||||
# 로그인된 사용자 이메일로 DATABASE 설정
|
||||
user_id = email.split('@')[0]
|
||||
Listup_user_id = 'Listup_id_' + user_id
|
||||
self.mydb = self.client[Listup_user_id]
|
||||
|
||||
|
||||
def set_User_Info(self, userInfo):
|
||||
self.loginUser.setText(f"로그인된 사용자: {self.currentUserEmail}")
|
||||
self.loginUserInfo.setText(f"{userInfo}")
|
||||
self.currentUserInfo = userInfo
|
||||
print(self.currentUserInfo)
|
||||
|
||||
|
||||
def closeEvent(self, event):
|
||||
"""메인 윈도우가 닫힐 때 호출되는 이벤트 핸들러."""
|
||||
if hasattr(self, 'login_widget'):
|
||||
self.login_widget.logout(self.currentUserEmail) # 로그아웃 처리
|
||||
super().closeEvent(event) # 기본 closeEvent 처리 호출
|
||||
|
||||
# 사용자에게 메시지 표시 등의 추가적인 처리를 할 수 있습니다.
|
||||
print("메인 윈도우가 닫히고 있습니다.")
|
||||
|
||||
def main():
|
||||
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_ShareOpenGLContexts)
|
||||
app = QtWidgets.QApplication(sys.argv)
|
||||
mongo_config = MongoConfig() # MongoDB 설정 관리 인스턴스 생성
|
||||
mongo_config.try_connect(*mongo_config.load_config()) # MongoDB에 연결 시도
|
||||
main_window = MainWindow(mongo_config) # 메인 윈도우 인스턴스 생성
|
||||
login_widget = LoginWidget(mongo_config, main_window) # 로그인 위젯 생성, 메인 윈도우 인스턴스 전달
|
||||
login_widget.show() # 로그인 위젯 표시
|
||||
sys.exit(app.exec_())
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
app = QApplication(sys.argv)
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,640 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
################################################################################
|
||||
## Form generated from reading UI file 'outline7.ui'
|
||||
##
|
||||
## Created by: Qt User Interface Compiler version 6.6.1
|
||||
##
|
||||
## WARNING! All changes made in this file will be lost when recompiling UI file!
|
||||
################################################################################
|
||||
|
||||
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
|
||||
QMetaObject, QObject, QPoint, QRect,
|
||||
QSize, QTime, QUrl, Qt)
|
||||
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
|
||||
QFont, QFontDatabase, QGradient, QIcon,
|
||||
QImage, QKeySequence, QLinearGradient, QPainter,
|
||||
QPalette, QPixmap, QRadialGradient, QTransform)
|
||||
from PySide6.QtWebEngineWidgets import QWebEngineView
|
||||
from PySide6.QtWidgets import (QAbstractButton, QAbstractSpinBox, QApplication, QComboBox,
|
||||
QDialog, QDialogButtonBox, QGraphicsView, QGroupBox,
|
||||
QHeaderView, QLabel, QLineEdit, QProgressBar,
|
||||
QPushButton, QSizePolicy, QSpinBox, QTabWidget,
|
||||
QTableView, QWidget)
|
||||
|
||||
class Ui_Dialog(object):
|
||||
def setupUi(self, Dialog):
|
||||
if not Dialog.objectName():
|
||||
Dialog.setObjectName(u"Dialog")
|
||||
Dialog.resize(1850, 1000)
|
||||
self.inputGroup = QGroupBox(Dialog)
|
||||
self.inputGroup.setObjectName(u"inputGroup")
|
||||
self.inputGroup.setGeometry(QRect(10, 50, 501, 941))
|
||||
self.Excel_btn = QPushButton(self.inputGroup)
|
||||
self.Excel_btn.setObjectName(u"Excel_btn")
|
||||
self.Excel_btn.setGeometry(QRect(10, 20, 51, 41))
|
||||
self.dbviewer1 = QTableView(self.inputGroup)
|
||||
self.dbviewer1.setObjectName(u"dbviewer1")
|
||||
self.dbviewer1.setGeometry(QRect(10, 180, 471, 641))
|
||||
self.isOverseas = QLineEdit(self.inputGroup)
|
||||
self.isOverseas.setObjectName(u"isOverseas")
|
||||
self.isOverseas.setGeometry(QRect(150, 20, 31, 31))
|
||||
self.isOverseas.setAlignment(Qt.AlignCenter)
|
||||
self.selkeyword_2 = QLabel(self.inputGroup)
|
||||
self.selkeyword_2.setObjectName(u"selkeyword_2")
|
||||
self.selkeyword_2.setGeometry(QRect(80, 20, 64, 31))
|
||||
self.selkeyword_3 = QLabel(self.inputGroup)
|
||||
self.selkeyword_3.setObjectName(u"selkeyword_3")
|
||||
self.selkeyword_3.setGeometry(QRect(80, 74, 64, 21))
|
||||
self.sortcount = QLineEdit(self.inputGroup)
|
||||
self.sortcount.setObjectName(u"sortcount")
|
||||
self.sortcount.setGeometry(QRect(150, 70, 31, 31))
|
||||
self.sortcount.setEchoMode(QLineEdit.Normal)
|
||||
self.sortcount.setCursorPosition(1)
|
||||
self.sortcount.setAlignment(Qt.AlignCenter)
|
||||
self.db_btn = QPushButton(self.inputGroup)
|
||||
self.db_btn.setObjectName(u"db_btn")
|
||||
self.db_btn.setGeometry(QRect(10, 70, 51, 41))
|
||||
self.export_btn = QPushButton(self.inputGroup)
|
||||
self.export_btn.setObjectName(u"export_btn")
|
||||
self.export_btn.setGeometry(QRect(390, 70, 91, 41))
|
||||
self.comboBox = QComboBox(self.inputGroup)
|
||||
self.comboBox.setObjectName(u"comboBox")
|
||||
self.comboBox.setGeometry(QRect(330, 120, 151, 31))
|
||||
self.matchCount = QLabel(self.inputGroup)
|
||||
self.matchCount.setObjectName(u"matchCount")
|
||||
self.matchCount.setGeometry(QRect(210, 20, 64, 31))
|
||||
self.matchCountbox = QLabel(self.inputGroup)
|
||||
self.matchCountbox.setObjectName(u"matchCountbox")
|
||||
self.matchCountbox.setGeometry(QRect(290, 20, 64, 31))
|
||||
font = QFont()
|
||||
font.setFamilies([u"Arial"])
|
||||
font.setPointSize(20)
|
||||
font.setBold(True)
|
||||
font.setUnderline(True)
|
||||
self.matchCountbox.setFont(font)
|
||||
self.matchCount_4 = QLabel(self.inputGroup)
|
||||
self.matchCount_4.setObjectName(u"matchCount_4")
|
||||
self.matchCount_4.setGeometry(QRect(210, 70, 64, 31))
|
||||
self.timerLabel = QLabel(self.inputGroup)
|
||||
self.timerLabel.setObjectName(u"timerLabel")
|
||||
self.timerLabel.setGeometry(QRect(270, 70, 111, 31))
|
||||
font1 = QFont()
|
||||
font1.setFamilies([u"Adobe Devanagari"])
|
||||
font1.setPointSize(20)
|
||||
font1.setBold(True)
|
||||
self.timerLabel.setFont(font1)
|
||||
self.timerLabel.setAlignment(Qt.AlignCenter)
|
||||
self.sc_button = QDialogButtonBox(self.inputGroup)
|
||||
self.sc_button.setObjectName(u"sc_button")
|
||||
self.sc_button.setGeometry(QRect(390, 30, 91, 31))
|
||||
self.sc_button.setStandardButtons(QDialogButtonBox.Apply)
|
||||
self.matchCount_5 = QLabel(self.inputGroup)
|
||||
self.matchCount_5.setObjectName(u"matchCount_5")
|
||||
self.matchCount_5.setGeometry(QRect(400, 10, 64, 21))
|
||||
self.sc_progressBar = QProgressBar(self.inputGroup)
|
||||
self.sc_progressBar.setObjectName(u"sc_progressBar")
|
||||
self.sc_progressBar.setGeometry(QRect(20, 120, 311, 20))
|
||||
self.sc_progressBar.setStyleSheet(u"font: 75 14pt \"Agency FB\";")
|
||||
self.sc_progressBar.setValue(0)
|
||||
self.img_progressBar = QProgressBar(self.inputGroup)
|
||||
self.img_progressBar.setObjectName(u"img_progressBar")
|
||||
self.img_progressBar.setGeometry(QRect(20, 150, 311, 20))
|
||||
self.img_progressBar.setStyleSheet(u"font: 75 14pt \"Agency FB\";")
|
||||
self.img_progressBar.setValue(0)
|
||||
self.selkeyword_4 = QLabel(self.inputGroup)
|
||||
self.selkeyword_4.setObjectName(u"selkeyword_4")
|
||||
self.selkeyword_4.setGeometry(QRect(130, 120, 51, 21))
|
||||
self.selkeyword_5 = QLabel(self.inputGroup)
|
||||
self.selkeyword_5.setObjectName(u"selkeyword_5")
|
||||
self.selkeyword_5.setGeometry(QRect(120, 150, 71, 21))
|
||||
self.groupBox = QGroupBox(Dialog)
|
||||
self.groupBox.setObjectName(u"groupBox")
|
||||
self.groupBox.setGeometry(QRect(520, 50, 1331, 941))
|
||||
self.selkeyword = QLabel(self.groupBox)
|
||||
self.selkeyword.setObjectName(u"selkeyword")
|
||||
self.selkeyword.setGeometry(QRect(500, 240, 111, 20))
|
||||
self.selkeyword.setAlignment(Qt.AlignCenter)
|
||||
self.urlbox = QLineEdit(self.groupBox)
|
||||
self.urlbox.setObjectName(u"urlbox")
|
||||
self.urlbox.setGeometry(QRect(630, 800, 641, 31))
|
||||
self.urlbox.setDragEnabled(False)
|
||||
self.urlbox.setClearButtonEnabled(True)
|
||||
self.deliveryfee = QLabel(self.groupBox)
|
||||
self.deliveryfee.setObjectName(u"deliveryfee")
|
||||
self.deliveryfee.setGeometry(QRect(500, 360, 64, 15))
|
||||
self.deliveryfee.setWordWrap(False)
|
||||
self.addmargin = QLabel(self.groupBox)
|
||||
self.addmargin.setObjectName(u"addmargin")
|
||||
self.addmargin.setGeometry(QRect(500, 480, 81, 16))
|
||||
self.addmargin.setWordWrap(False)
|
||||
self.addpackingfee = QLabel(self.groupBox)
|
||||
self.addpackingfee.setObjectName(u"addpackingfee")
|
||||
self.addpackingfee.setGeometry(QRect(500, 420, 91, 16))
|
||||
self.addpackingfee.setWordWrap(False)
|
||||
self.selkeywordbox = QLineEdit(self.groupBox)
|
||||
self.selkeywordbox.setObjectName(u"selkeywordbox")
|
||||
self.selkeywordbox.setGeometry(QRect(500, 260, 113, 31))
|
||||
self.selkeywordbox.setStyleSheet(u"font: 10pt \"\uc0c8\uad74\ub9bc\";")
|
||||
self.selkeywordbox.setClearButtonEnabled(True)
|
||||
self.graphicsView_multi = QGraphicsView(self.groupBox)
|
||||
self.graphicsView_multi.setObjectName(u"graphicsView_multi")
|
||||
self.graphicsView_multi.setGeometry(QRect(310, 30, 170, 810))
|
||||
self.groupBox_2 = QGroupBox(self.groupBox)
|
||||
self.groupBox_2.setObjectName(u"groupBox_2")
|
||||
self.groupBox_2.setGeometry(QRect(10, 30, 291, 151))
|
||||
self.sel_item11_2 = QLabel(self.groupBox_2)
|
||||
self.sel_item11_2.setObjectName(u"sel_item11_2")
|
||||
self.sel_item11_2.setGeometry(QRect(10, 20, 31, 20))
|
||||
self.sel_itembox11 = QLineEdit(self.groupBox_2)
|
||||
self.sel_itembox11.setObjectName(u"sel_itembox11")
|
||||
self.sel_itembox11.setGeometry(QRect(60, 20, 221, 21))
|
||||
self.sel_item12_5 = QLabel(self.groupBox_2)
|
||||
self.sel_item12_5.setObjectName(u"sel_item12_5")
|
||||
self.sel_item12_5.setGeometry(QRect(10, 50, 51, 20))
|
||||
self.sel_itembox12 = QLineEdit(self.groupBox_2)
|
||||
self.sel_itembox12.setObjectName(u"sel_itembox12")
|
||||
self.sel_itembox12.setGeometry(QRect(60, 50, 221, 21))
|
||||
self.sel_item12_2 = QLabel(self.groupBox_2)
|
||||
self.sel_item12_2.setObjectName(u"sel_item12_2")
|
||||
self.sel_item12_2.setGeometry(QRect(10, 80, 51, 20))
|
||||
self.sel_itembox13 = QLineEdit(self.groupBox_2)
|
||||
self.sel_itembox13.setObjectName(u"sel_itembox13")
|
||||
self.sel_itembox13.setGeometry(QRect(60, 80, 101, 21))
|
||||
self.sel_item12_3 = QLabel(self.groupBox_2)
|
||||
self.sel_item12_3.setObjectName(u"sel_item12_3")
|
||||
self.sel_item12_3.setGeometry(QRect(170, 80, 31, 20))
|
||||
self.sel_itembox14 = QLineEdit(self.groupBox_2)
|
||||
self.sel_itembox14.setObjectName(u"sel_itembox14")
|
||||
self.sel_itembox14.setGeometry(QRect(210, 80, 71, 21))
|
||||
self.sel_item11 = QLabel(self.groupBox_2)
|
||||
self.sel_item11.setObjectName(u"sel_item11")
|
||||
self.sel_item11.setGeometry(QRect(10, 110, 51, 20))
|
||||
self.sel_itembox15 = QLineEdit(self.groupBox_2)
|
||||
self.sel_itembox15.setObjectName(u"sel_itembox15")
|
||||
self.sel_itembox15.setGeometry(QRect(60, 110, 91, 21))
|
||||
self.sel_item12 = QLabel(self.groupBox_2)
|
||||
self.sel_item12.setObjectName(u"sel_item12")
|
||||
self.sel_item12.setGeometry(QRect(160, 110, 61, 20))
|
||||
self.sel_itembox16 = QLineEdit(self.groupBox_2)
|
||||
self.sel_itembox16.setObjectName(u"sel_itembox16")
|
||||
self.sel_itembox16.setGeometry(QRect(230, 110, 51, 21))
|
||||
self.groupBox_3 = QGroupBox(self.groupBox)
|
||||
self.groupBox_3.setObjectName(u"groupBox_3")
|
||||
self.groupBox_3.setGeometry(QRect(10, 190, 291, 151))
|
||||
self.sel_item11_3 = QLabel(self.groupBox_3)
|
||||
self.sel_item11_3.setObjectName(u"sel_item11_3")
|
||||
self.sel_item11_3.setGeometry(QRect(10, 20, 31, 20))
|
||||
self.sel_itembox21 = QLineEdit(self.groupBox_3)
|
||||
self.sel_itembox21.setObjectName(u"sel_itembox21")
|
||||
self.sel_itembox21.setGeometry(QRect(60, 20, 221, 21))
|
||||
self.sel_item12_6 = QLabel(self.groupBox_3)
|
||||
self.sel_item12_6.setObjectName(u"sel_item12_6")
|
||||
self.sel_item12_6.setGeometry(QRect(10, 50, 51, 20))
|
||||
self.sel_itembox22 = QLineEdit(self.groupBox_3)
|
||||
self.sel_itembox22.setObjectName(u"sel_itembox22")
|
||||
self.sel_itembox22.setGeometry(QRect(60, 50, 221, 21))
|
||||
self.sel_item12_7 = QLabel(self.groupBox_3)
|
||||
self.sel_item12_7.setObjectName(u"sel_item12_7")
|
||||
self.sel_item12_7.setGeometry(QRect(0, 70, 51, 20))
|
||||
self.sel_itembox23 = QLineEdit(self.groupBox_3)
|
||||
self.sel_itembox23.setObjectName(u"sel_itembox23")
|
||||
self.sel_itembox23.setGeometry(QRect(60, 80, 101, 21))
|
||||
self.sel_item12_8 = QLabel(self.groupBox_3)
|
||||
self.sel_item12_8.setObjectName(u"sel_item12_8")
|
||||
self.sel_item12_8.setGeometry(QRect(170, 80, 31, 20))
|
||||
self.sel_itembox24 = QLineEdit(self.groupBox_3)
|
||||
self.sel_itembox24.setObjectName(u"sel_itembox24")
|
||||
self.sel_itembox24.setGeometry(QRect(210, 80, 71, 21))
|
||||
self.sel_item11_4 = QLabel(self.groupBox_3)
|
||||
self.sel_item11_4.setObjectName(u"sel_item11_4")
|
||||
self.sel_item11_4.setGeometry(QRect(10, 110, 51, 20))
|
||||
self.sel_itembox25 = QLineEdit(self.groupBox_3)
|
||||
self.sel_itembox25.setObjectName(u"sel_itembox25")
|
||||
self.sel_itembox25.setGeometry(QRect(60, 110, 91, 21))
|
||||
self.sel_item12_9 = QLabel(self.groupBox_3)
|
||||
self.sel_item12_9.setObjectName(u"sel_item12_9")
|
||||
self.sel_item12_9.setGeometry(QRect(160, 110, 61, 20))
|
||||
self.sel_itembox26 = QLineEdit(self.groupBox_3)
|
||||
self.sel_itembox26.setObjectName(u"sel_itembox26")
|
||||
self.sel_itembox26.setGeometry(QRect(230, 110, 51, 21))
|
||||
self.groupBox_4 = QGroupBox(self.groupBox)
|
||||
self.groupBox_4.setObjectName(u"groupBox_4")
|
||||
self.groupBox_4.setGeometry(QRect(10, 350, 291, 151))
|
||||
self.sel_item11_5 = QLabel(self.groupBox_4)
|
||||
self.sel_item11_5.setObjectName(u"sel_item11_5")
|
||||
self.sel_item11_5.setGeometry(QRect(10, 20, 31, 20))
|
||||
self.sel_itembox31 = QLineEdit(self.groupBox_4)
|
||||
self.sel_itembox31.setObjectName(u"sel_itembox31")
|
||||
self.sel_itembox31.setGeometry(QRect(60, 20, 221, 21))
|
||||
self.sel_item12_10 = QLabel(self.groupBox_4)
|
||||
self.sel_item12_10.setObjectName(u"sel_item12_10")
|
||||
self.sel_item12_10.setGeometry(QRect(10, 50, 51, 20))
|
||||
self.sel_itembox32 = QLineEdit(self.groupBox_4)
|
||||
self.sel_itembox32.setObjectName(u"sel_itembox32")
|
||||
self.sel_itembox32.setGeometry(QRect(60, 50, 221, 21))
|
||||
self.sel_item12_11 = QLabel(self.groupBox_4)
|
||||
self.sel_item12_11.setObjectName(u"sel_item12_11")
|
||||
self.sel_item12_11.setGeometry(QRect(10, 80, 51, 20))
|
||||
self.sel_itembox33 = QLineEdit(self.groupBox_4)
|
||||
self.sel_itembox33.setObjectName(u"sel_itembox33")
|
||||
self.sel_itembox33.setGeometry(QRect(60, 80, 101, 21))
|
||||
self.sel_item12_12 = QLabel(self.groupBox_4)
|
||||
self.sel_item12_12.setObjectName(u"sel_item12_12")
|
||||
self.sel_item12_12.setGeometry(QRect(170, 80, 31, 20))
|
||||
self.sel_itembox34 = QLineEdit(self.groupBox_4)
|
||||
self.sel_itembox34.setObjectName(u"sel_itembox34")
|
||||
self.sel_itembox34.setGeometry(QRect(210, 80, 71, 21))
|
||||
self.sel_item11_6 = QLabel(self.groupBox_4)
|
||||
self.sel_item11_6.setObjectName(u"sel_item11_6")
|
||||
self.sel_item11_6.setGeometry(QRect(10, 110, 51, 20))
|
||||
self.sel_itembox35 = QLineEdit(self.groupBox_4)
|
||||
self.sel_itembox35.setObjectName(u"sel_itembox35")
|
||||
self.sel_itembox35.setGeometry(QRect(60, 110, 91, 21))
|
||||
self.sel_item12_13 = QLabel(self.groupBox_4)
|
||||
self.sel_item12_13.setObjectName(u"sel_item12_13")
|
||||
self.sel_item12_13.setGeometry(QRect(160, 110, 61, 20))
|
||||
self.sel_itembox36 = QLineEdit(self.groupBox_4)
|
||||
self.sel_itembox36.setObjectName(u"sel_itembox36")
|
||||
self.sel_itembox36.setGeometry(QRect(230, 110, 51, 21))
|
||||
self.groupBox_5 = QGroupBox(self.groupBox)
|
||||
self.groupBox_5.setObjectName(u"groupBox_5")
|
||||
self.groupBox_5.setGeometry(QRect(10, 510, 291, 151))
|
||||
self.sel_item11_7 = QLabel(self.groupBox_5)
|
||||
self.sel_item11_7.setObjectName(u"sel_item11_7")
|
||||
self.sel_item11_7.setGeometry(QRect(10, 20, 31, 20))
|
||||
self.sel_itembox41 = QLineEdit(self.groupBox_5)
|
||||
self.sel_itembox41.setObjectName(u"sel_itembox41")
|
||||
self.sel_itembox41.setGeometry(QRect(60, 20, 221, 21))
|
||||
self.sel_item12_14 = QLabel(self.groupBox_5)
|
||||
self.sel_item12_14.setObjectName(u"sel_item12_14")
|
||||
self.sel_item12_14.setGeometry(QRect(10, 50, 51, 20))
|
||||
self.sel_itembox42 = QLineEdit(self.groupBox_5)
|
||||
self.sel_itembox42.setObjectName(u"sel_itembox42")
|
||||
self.sel_itembox42.setGeometry(QRect(60, 50, 221, 21))
|
||||
self.sel_item12_15 = QLabel(self.groupBox_5)
|
||||
self.sel_item12_15.setObjectName(u"sel_item12_15")
|
||||
self.sel_item12_15.setGeometry(QRect(10, 80, 51, 20))
|
||||
self.sel_itembox43 = QLineEdit(self.groupBox_5)
|
||||
self.sel_itembox43.setObjectName(u"sel_itembox43")
|
||||
self.sel_itembox43.setGeometry(QRect(60, 80, 101, 21))
|
||||
self.sel_item12_16 = QLabel(self.groupBox_5)
|
||||
self.sel_item12_16.setObjectName(u"sel_item12_16")
|
||||
self.sel_item12_16.setGeometry(QRect(170, 80, 31, 20))
|
||||
self.sel_itembox44 = QLineEdit(self.groupBox_5)
|
||||
self.sel_itembox44.setObjectName(u"sel_itembox44")
|
||||
self.sel_itembox44.setGeometry(QRect(210, 80, 71, 21))
|
||||
self.sel_item11_8 = QLabel(self.groupBox_5)
|
||||
self.sel_item11_8.setObjectName(u"sel_item11_8")
|
||||
self.sel_item11_8.setGeometry(QRect(10, 110, 51, 20))
|
||||
self.sel_itembox45 = QLineEdit(self.groupBox_5)
|
||||
self.sel_itembox45.setObjectName(u"sel_itembox45")
|
||||
self.sel_itembox45.setGeometry(QRect(60, 110, 91, 21))
|
||||
self.sel_item12_17 = QLabel(self.groupBox_5)
|
||||
self.sel_item12_17.setObjectName(u"sel_item12_17")
|
||||
self.sel_item12_17.setGeometry(QRect(160, 110, 61, 20))
|
||||
self.sel_itembox46 = QLineEdit(self.groupBox_5)
|
||||
self.sel_itembox46.setObjectName(u"sel_itembox46")
|
||||
self.sel_itembox46.setGeometry(QRect(230, 110, 51, 21))
|
||||
self.groupBox_6 = QGroupBox(self.groupBox)
|
||||
self.groupBox_6.setObjectName(u"groupBox_6")
|
||||
self.groupBox_6.setGeometry(QRect(10, 670, 291, 151))
|
||||
self.sel_item11_9 = QLabel(self.groupBox_6)
|
||||
self.sel_item11_9.setObjectName(u"sel_item11_9")
|
||||
self.sel_item11_9.setGeometry(QRect(10, 20, 31, 20))
|
||||
self.sel_itembox51 = QLineEdit(self.groupBox_6)
|
||||
self.sel_itembox51.setObjectName(u"sel_itembox51")
|
||||
self.sel_itembox51.setGeometry(QRect(60, 20, 221, 21))
|
||||
self.sel_item12_18 = QLabel(self.groupBox_6)
|
||||
self.sel_item12_18.setObjectName(u"sel_item12_18")
|
||||
self.sel_item12_18.setGeometry(QRect(10, 50, 51, 20))
|
||||
self.sel_itembox52 = QLineEdit(self.groupBox_6)
|
||||
self.sel_itembox52.setObjectName(u"sel_itembox52")
|
||||
self.sel_itembox52.setGeometry(QRect(60, 50, 221, 21))
|
||||
self.sel_item12_19 = QLabel(self.groupBox_6)
|
||||
self.sel_item12_19.setObjectName(u"sel_item12_19")
|
||||
self.sel_item12_19.setGeometry(QRect(10, 80, 51, 20))
|
||||
self.sel_itembox53 = QLineEdit(self.groupBox_6)
|
||||
self.sel_itembox53.setObjectName(u"sel_itembox53")
|
||||
self.sel_itembox53.setGeometry(QRect(60, 80, 101, 21))
|
||||
self.sel_item12_20 = QLabel(self.groupBox_6)
|
||||
self.sel_item12_20.setObjectName(u"sel_item12_20")
|
||||
self.sel_item12_20.setGeometry(QRect(170, 80, 31, 20))
|
||||
self.sel_itembox54 = QLineEdit(self.groupBox_6)
|
||||
self.sel_itembox54.setObjectName(u"sel_itembox54")
|
||||
self.sel_itembox54.setGeometry(QRect(210, 80, 71, 21))
|
||||
self.sel_item11_10 = QLabel(self.groupBox_6)
|
||||
self.sel_item11_10.setObjectName(u"sel_item11_10")
|
||||
self.sel_item11_10.setGeometry(QRect(10, 110, 51, 20))
|
||||
self.sel_itembox55 = QLineEdit(self.groupBox_6)
|
||||
self.sel_itembox55.setObjectName(u"sel_itembox55")
|
||||
self.sel_itembox55.setGeometry(QRect(60, 110, 91, 21))
|
||||
self.sel_item12_21 = QLabel(self.groupBox_6)
|
||||
self.sel_item12_21.setObjectName(u"sel_item12_21")
|
||||
self.sel_item12_21.setGeometry(QRect(160, 110, 61, 20))
|
||||
self.sel_itembox56 = QLineEdit(self.groupBox_6)
|
||||
self.sel_itembox56.setObjectName(u"sel_itembox56")
|
||||
self.sel_itembox56.setGeometry(QRect(230, 110, 51, 21))
|
||||
self.urlgobtn = QPushButton(self.groupBox)
|
||||
self.urlgobtn.setObjectName(u"urlgobtn")
|
||||
self.urlgobtn.setGeometry(QRect(1280, 800, 41, 31))
|
||||
self.sel_item12_22 = QLabel(self.groupBox)
|
||||
self.sel_item12_22.setObjectName(u"sel_item12_22")
|
||||
self.sel_item12_22.setGeometry(QRect(500, 300, 51, 20))
|
||||
self.sel_itemtagbox = QLineEdit(self.groupBox)
|
||||
self.sel_itemtagbox.setObjectName(u"sel_itemtagbox")
|
||||
self.sel_itemtagbox.setGeometry(QRect(500, 320, 111, 31))
|
||||
self.sel_itemtagbox.setClearButtonEnabled(True)
|
||||
self.matchbtn = QPushButton(self.groupBox)
|
||||
self.matchbtn.setObjectName(u"matchbtn")
|
||||
self.matchbtn.setGeometry(QRect(500, 190, 121, 41))
|
||||
self.matchbtn.setStyleSheet(u"background-color: rgb(0, 255, 255);\n"
|
||||
"font: 16pt \"HY\ud5e4\ub4dc\ub77c\uc778M\";")
|
||||
self.search_keyword_box = QLineEdit(self.groupBox)
|
||||
self.search_keyword_box.setObjectName(u"search_keyword_box")
|
||||
self.search_keyword_box.setGeometry(QRect(630, 10, 191, 41))
|
||||
self.search_keyword_box.setClearButtonEnabled(True)
|
||||
self.searchbtn_2 = QPushButton(self.groupBox)
|
||||
self.searchbtn_2.setObjectName(u"searchbtn_2")
|
||||
self.searchbtn_2.setGeometry(QRect(830, 10, 111, 41))
|
||||
self.searchbtn_2.setCheckable(False)
|
||||
self.searchbtn_2.setAutoDefault(True)
|
||||
self.searchbtn_2.setFlat(False)
|
||||
self.switchBtn = QPushButton(self.groupBox)
|
||||
self.switchBtn.setObjectName(u"switchBtn")
|
||||
self.switchBtn.setGeometry(QRect(1240, 10, 75, 41))
|
||||
self.tabWidget = QTabWidget(self.groupBox)
|
||||
self.tabWidget.setObjectName(u"tabWidget")
|
||||
self.tabWidget.setGeometry(QRect(620, 60, 701, 741))
|
||||
self.tabWidget.setTabBarAutoHide(False)
|
||||
self.tab_1 = QWidget()
|
||||
self.tab_1.setObjectName(u"tab_1")
|
||||
self.webEngineView = QWebEngineView(self.tab_1)
|
||||
self.webEngineView.setObjectName(u"webEngineView")
|
||||
self.webEngineView.setGeometry(QRect(0, 0, 711, 731))
|
||||
self.webEngineView.setUrl(QUrl(u"https://m.intl.taobao.com/"))
|
||||
self.webEngineView.setZoomFactor(0.500000000000000)
|
||||
self.tabWidget.addTab(self.tab_1, "")
|
||||
self.tab_2 = QWidget()
|
||||
self.tab_2.setObjectName(u"tab_2")
|
||||
self.webEngineView_2 = QWebEngineView(self.tab_2)
|
||||
self.webEngineView_2.setObjectName(u"webEngineView_2")
|
||||
self.webEngineView_2.setGeometry(QRect(10, 10, 711, 731))
|
||||
self.webEngineView_2.setUrl(QUrl(u"https://world.taobao.com/"))
|
||||
self.webEngineView_2.setZoomFactor(0.400000000000000)
|
||||
self.tabWidget.addTab(self.tab_2, "")
|
||||
self.cat1 = QLabel(self.groupBox)
|
||||
self.cat1.setObjectName(u"cat1")
|
||||
self.cat1.setGeometry(QRect(500, 540, 81, 16))
|
||||
self.cat1.setWordWrap(False)
|
||||
self.cat2 = QLabel(self.groupBox)
|
||||
self.cat2.setObjectName(u"cat2")
|
||||
self.cat2.setGeometry(QRect(500, 600, 81, 16))
|
||||
self.cat2.setWordWrap(False)
|
||||
self.cat3 = QLabel(self.groupBox)
|
||||
self.cat3.setObjectName(u"cat3")
|
||||
self.cat3.setGeometry(QRect(500, 660, 81, 16))
|
||||
self.cat3.setWordWrap(False)
|
||||
self.cat4 = QLabel(self.groupBox)
|
||||
self.cat4.setObjectName(u"cat4")
|
||||
self.cat4.setGeometry(QRect(500, 720, 81, 16))
|
||||
self.cat4.setWordWrap(False)
|
||||
self.catbox1 = QLineEdit(self.groupBox)
|
||||
self.catbox1.setObjectName(u"catbox1")
|
||||
self.catbox1.setGeometry(QRect(500, 560, 111, 31))
|
||||
self.catbox1.setClearButtonEnabled(True)
|
||||
self.catbox2 = QLineEdit(self.groupBox)
|
||||
self.catbox2.setObjectName(u"catbox2")
|
||||
self.catbox2.setGeometry(QRect(500, 620, 111, 31))
|
||||
self.catbox2.setClearButtonEnabled(True)
|
||||
self.catbox3 = QLineEdit(self.groupBox)
|
||||
self.catbox3.setObjectName(u"catbox3")
|
||||
self.catbox3.setGeometry(QRect(500, 680, 111, 31))
|
||||
self.catbox3.setClearButtonEnabled(True)
|
||||
self.catbox4 = QLineEdit(self.groupBox)
|
||||
self.catbox4.setObjectName(u"catbox4")
|
||||
self.catbox4.setGeometry(QRect(500, 740, 111, 31))
|
||||
self.catbox4.setClearButtonEnabled(True)
|
||||
self.catcodebox = QLineEdit(self.groupBox)
|
||||
self.catcodebox.setObjectName(u"catcodebox")
|
||||
self.catcodebox.setGeometry(QRect(500, 800, 111, 31))
|
||||
self.catcodebox.setClearButtonEnabled(True)
|
||||
self.cat4_2 = QLabel(self.groupBox)
|
||||
self.cat4_2.setObjectName(u"cat4_2")
|
||||
self.cat4_2.setGeometry(QRect(500, 780, 81, 16))
|
||||
self.cat4_2.setWordWrap(False)
|
||||
self.addmargin_spbox = QSpinBox(self.groupBox)
|
||||
self.addmargin_spbox.setObjectName(u"addmargin_spbox")
|
||||
self.addmargin_spbox.setGeometry(QRect(500, 500, 111, 31))
|
||||
sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.addmargin_spbox.sizePolicy().hasHeightForWidth())
|
||||
self.addmargin_spbox.setSizePolicy(sizePolicy)
|
||||
font2 = QFont()
|
||||
font2.setFamilies([u"Agency FB"])
|
||||
font2.setPointSize(16)
|
||||
self.addmargin_spbox.setFont(font2)
|
||||
self.addmargin_spbox.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
|
||||
self.addmargin_spbox.setButtonSymbols(QAbstractSpinBox.PlusMinus)
|
||||
self.addmargin_spbox.setCorrectionMode(QAbstractSpinBox.CorrectToPreviousValue)
|
||||
self.addmargin_spbox.setMinimum(1000)
|
||||
self.addmargin_spbox.setMaximum(600000)
|
||||
self.addmargin_spbox.setSingleStep(1000)
|
||||
self.addmargin_spbox.setStepType(QAbstractSpinBox.DefaultStepType)
|
||||
self.addmargin_spbox.setValue(5000)
|
||||
self.addmargin_spbox.setDisplayIntegerBase(10)
|
||||
self.addpackingfee_spbox = QSpinBox(self.groupBox)
|
||||
self.addpackingfee_spbox.setObjectName(u"addpackingfee_spbox")
|
||||
self.addpackingfee_spbox.setGeometry(QRect(500, 440, 111, 31))
|
||||
sizePolicy.setHeightForWidth(self.addpackingfee_spbox.sizePolicy().hasHeightForWidth())
|
||||
self.addpackingfee_spbox.setSizePolicy(sizePolicy)
|
||||
self.addpackingfee_spbox.setFont(font2)
|
||||
self.addpackingfee_spbox.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
|
||||
self.addpackingfee_spbox.setButtonSymbols(QAbstractSpinBox.PlusMinus)
|
||||
self.addpackingfee_spbox.setCorrectionMode(QAbstractSpinBox.CorrectToPreviousValue)
|
||||
self.addpackingfee_spbox.setMinimum(0)
|
||||
self.addpackingfee_spbox.setMaximum(100000)
|
||||
self.addpackingfee_spbox.setSingleStep(1000)
|
||||
self.addpackingfee_spbox.setStepType(QAbstractSpinBox.DefaultStepType)
|
||||
self.addpackingfee_spbox.setValue(0)
|
||||
self.addpackingfee_spbox.setDisplayIntegerBase(10)
|
||||
self.delivfee_spbox = QSpinBox(self.groupBox)
|
||||
self.delivfee_spbox.setObjectName(u"delivfee_spbox")
|
||||
self.delivfee_spbox.setGeometry(QRect(500, 380, 111, 31))
|
||||
sizePolicy.setHeightForWidth(self.delivfee_spbox.sizePolicy().hasHeightForWidth())
|
||||
self.delivfee_spbox.setSizePolicy(sizePolicy)
|
||||
self.delivfee_spbox.setFont(font2)
|
||||
self.delivfee_spbox.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
|
||||
self.delivfee_spbox.setButtonSymbols(QAbstractSpinBox.PlusMinus)
|
||||
self.delivfee_spbox.setCorrectionMode(QAbstractSpinBox.CorrectToPreviousValue)
|
||||
self.delivfee_spbox.setMinimum(7000)
|
||||
self.delivfee_spbox.setMaximum(6000000)
|
||||
self.delivfee_spbox.setSingleStep(1000)
|
||||
self.delivfee_spbox.setStepType(QAbstractSpinBox.DefaultStepType)
|
||||
self.delivfee_spbox.setValue(7000)
|
||||
self.delivfee_spbox.setDisplayIntegerBase(10)
|
||||
self.img_searchbtn = QPushButton(self.groupBox)
|
||||
self.img_searchbtn.setObjectName(u"img_searchbtn")
|
||||
self.img_searchbtn.setGeometry(QRect(500, 10, 121, 41))
|
||||
self.current_img = QGraphicsView(self.groupBox)
|
||||
self.current_img.setObjectName(u"current_img")
|
||||
self.current_img.setGeometry(QRect(500, 60, 120, 120))
|
||||
self.backbtn = QPushButton(self.groupBox)
|
||||
self.backbtn.setObjectName(u"backbtn")
|
||||
self.backbtn.setGeometry(QRect(950, 10, 61, 41))
|
||||
self.forwardbtn = QPushButton(self.groupBox)
|
||||
self.forwardbtn.setObjectName(u"forwardbtn")
|
||||
self.forwardbtn.setGeometry(QRect(1020, 10, 61, 41))
|
||||
self.sel_relatedTagbox = QLineEdit(Dialog)
|
||||
self.sel_relatedTagbox.setObjectName(u"sel_relatedTagbox")
|
||||
self.sel_relatedTagbox.setGeometry(QRect(720, 20, 571, 31))
|
||||
self.sel_relatedTagbox.setClearButtonEnabled(True)
|
||||
self.sel_item12_4 = QLabel(Dialog)
|
||||
self.sel_item12_4.setObjectName(u"sel_item12_4")
|
||||
self.sel_item12_4.setGeometry(QRect(640, 20, 81, 31))
|
||||
self.taourl = QLabel(Dialog)
|
||||
self.taourl.setObjectName(u"taourl")
|
||||
self.taourl.setGeometry(QRect(1300, 20, 131, 31))
|
||||
self.taourlbox = QLineEdit(Dialog)
|
||||
self.taourlbox.setObjectName(u"taourlbox")
|
||||
self.taourlbox.setGeometry(QRect(1420, 20, 411, 31))
|
||||
self.timerStart = QPushButton(Dialog)
|
||||
self.timerStart.setObjectName(u"timerStart")
|
||||
self.timerStart.setGeometry(QRect(150, 10, 61, 31))
|
||||
self.timerStart.setCheckable(False)
|
||||
self.timerStart.setAutoDefault(True)
|
||||
self.timerStart.setFlat(False)
|
||||
self.timerStop = QPushButton(Dialog)
|
||||
self.timerStop.setObjectName(u"timerStop")
|
||||
self.timerStop.setGeometry(QRect(450, 10, 51, 31))
|
||||
self.timerStop.setCheckable(False)
|
||||
self.timerStop.setAutoDefault(True)
|
||||
self.timerStop.setFlat(False)
|
||||
self.timerSet = QPushButton(Dialog)
|
||||
self.timerSet.setObjectName(u"timerSet")
|
||||
self.timerSet.setGeometry(QRect(340, 10, 61, 31))
|
||||
self.timerSet.setCheckable(False)
|
||||
self.timerSet.setAutoDefault(True)
|
||||
self.timerSet.setFlat(False)
|
||||
self.timerMinute = QLineEdit(Dialog)
|
||||
self.timerMinute.setObjectName(u"timerMinute")
|
||||
self.timerMinute.setGeometry(QRect(230, 10, 31, 31))
|
||||
self.timerMinute.setAlignment(Qt.AlignCenter)
|
||||
self.timerSecond = QLineEdit(Dialog)
|
||||
self.timerSecond.setObjectName(u"timerSecond")
|
||||
self.timerSecond.setGeometry(QRect(290, 10, 31, 31))
|
||||
self.timerSecond.setAlignment(Qt.AlignCenter)
|
||||
self.matchCount_2 = QLabel(Dialog)
|
||||
self.matchCount_2.setObjectName(u"matchCount_2")
|
||||
self.matchCount_2.setGeometry(QRect(260, 10, 31, 31))
|
||||
self.matchCount_3 = QLabel(Dialog)
|
||||
self.matchCount_3.setObjectName(u"matchCount_3")
|
||||
self.matchCount_3.setGeometry(QRect(320, 10, 31, 31))
|
||||
self.papagoApi = QPushButton(Dialog)
|
||||
self.papagoApi.setObjectName(u"papagoApi")
|
||||
self.papagoApi.setGeometry(QRect(520, 10, 101, 28))
|
||||
|
||||
self.retranslateUi(Dialog)
|
||||
self.forwardbtn.clicked.connect(self.webEngineView_2.forward)
|
||||
self.backbtn.clicked.connect(self.webEngineView_2.back)
|
||||
|
||||
self.searchbtn_2.setDefault(True)
|
||||
self.tabWidget.setCurrentIndex(1)
|
||||
self.timerStart.setDefault(True)
|
||||
self.timerStop.setDefault(True)
|
||||
self.timerSet.setDefault(True)
|
||||
|
||||
|
||||
QMetaObject.connectSlotsByName(Dialog)
|
||||
# setupUi
|
||||
|
||||
def retranslateUi(self, Dialog):
|
||||
Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None))
|
||||
self.inputGroup.setTitle(QCoreApplication.translate("Dialog", u"\uc785\ub825\uc601\uc5ed", None))
|
||||
self.Excel_btn.setText(QCoreApplication.translate("Dialog", u"\uc5d1\uc140\n"
|
||||
"\uc5f4\uae30", None))
|
||||
self.isOverseas.setText(QCoreApplication.translate("Dialog", u"1", None))
|
||||
self.selkeyword_2.setText(QCoreApplication.translate("Dialog", u"\ud574\uc678\uc5ec\ubd80", None))
|
||||
self.selkeyword_3.setText(QCoreApplication.translate("Dialog", u"\ucd94\ucd9c\uac2f\uc218", None))
|
||||
self.sortcount.setText(QCoreApplication.translate("Dialog", u"5", None))
|
||||
self.db_btn.setText(QCoreApplication.translate("Dialog", u"DB\n"
|
||||
"\uc5f4\uae30", None))
|
||||
self.export_btn.setText(QCoreApplication.translate("Dialog", u"XLS\n"
|
||||
"\uc800\uc7a5", None))
|
||||
self.matchCount.setText(QCoreApplication.translate("Dialog", u"\ub9e4\uce6d\uac2f\uc218", None))
|
||||
self.matchCountbox.setText("")
|
||||
self.matchCount_4.setText(QCoreApplication.translate("Dialog", u"\ud0c0\uc774\uba38", None))
|
||||
self.timerLabel.setText(QCoreApplication.translate("Dialog", u"60:00", None))
|
||||
self.matchCount_5.setText(QCoreApplication.translate("Dialog", u"\uc2a4\ud06c\ub798\ud551", None))
|
||||
self.selkeyword_4.setText(QCoreApplication.translate("Dialog", u"Scraping", None))
|
||||
self.selkeyword_5.setText(QCoreApplication.translate("Dialog", u"Save Image", None))
|
||||
self.groupBox.setTitle(QCoreApplication.translate("Dialog", u"\ud45c\uc2dc\uc601\uc5ed", None))
|
||||
self.selkeyword.setText(QCoreApplication.translate("Dialog", u"\ud604\uc7acitem(\uac00\uc9c0\uce58\uae30)", None))
|
||||
self.urlbox.setText(QCoreApplication.translate("Dialog", u"http://naver.com", None))
|
||||
self.deliveryfee.setText(QCoreApplication.translate("Dialog", u"\ubc30\uc1a1\ube44", None))
|
||||
self.addmargin.setText(QCoreApplication.translate("Dialog", u"\ub354\ud558\uae30\ub9c8\uc9c4", None))
|
||||
self.addpackingfee.setText(QCoreApplication.translate("Dialog", u"\ucd94\uac00\ud3ec\uc7a5\ube44", None))
|
||||
self.groupBox_2.setTitle(QCoreApplication.translate("Dialog", u"1\ubc88 \uc0c1\ud488", None))
|
||||
self.sel_item11_2.setText(QCoreApplication.translate("Dialog", u"\uc774\ub984", None))
|
||||
self.sel_item12_5.setText(QCoreApplication.translate("Dialog", u"Tag", None))
|
||||
self.sel_item12_2.setText(QCoreApplication.translate("Dialog", u"\ub9ac\ubdf0\uc218", None))
|
||||
self.sel_item12_3.setText(QCoreApplication.translate("Dialog", u"\ucc1c\uc218", None))
|
||||
self.sel_item11.setText(QCoreApplication.translate("Dialog", u"\uac00 \uaca9", None))
|
||||
self.sel_item12.setText(QCoreApplication.translate("Dialog", u"\uad6c\ub9e4\uac74\uc218", None))
|
||||
self.groupBox_3.setTitle(QCoreApplication.translate("Dialog", u"2\ubc88 \uc0c1\ud488", None))
|
||||
self.sel_item11_3.setText(QCoreApplication.translate("Dialog", u"\uc774\ub984", None))
|
||||
self.sel_item12_6.setText(QCoreApplication.translate("Dialog", u"Tag", None))
|
||||
self.sel_item12_7.setText(QCoreApplication.translate("Dialog", u"\ub9ac\ubdf0\uc218", None))
|
||||
self.sel_item12_8.setText(QCoreApplication.translate("Dialog", u"\ucc1c\uc218", None))
|
||||
self.sel_item11_4.setText(QCoreApplication.translate("Dialog", u"\uac00 \uaca9", None))
|
||||
self.sel_item12_9.setText(QCoreApplication.translate("Dialog", u"\uad6c\ub9e4\uac74\uc218", None))
|
||||
self.groupBox_4.setTitle(QCoreApplication.translate("Dialog", u"3\ubc88 \uc0c1\ud488", None))
|
||||
self.sel_item11_5.setText(QCoreApplication.translate("Dialog", u"\uc774\ub984", None))
|
||||
self.sel_item12_10.setText(QCoreApplication.translate("Dialog", u"Tag", None))
|
||||
self.sel_item12_11.setText(QCoreApplication.translate("Dialog", u"\ub9ac\ubdf0\uc218", None))
|
||||
self.sel_item12_12.setText(QCoreApplication.translate("Dialog", u"\ucc1c\uc218", None))
|
||||
self.sel_item11_6.setText(QCoreApplication.translate("Dialog", u"\uac00 \uaca9", None))
|
||||
self.sel_item12_13.setText(QCoreApplication.translate("Dialog", u"\uad6c\ub9e4\uac74\uc218", None))
|
||||
self.groupBox_5.setTitle(QCoreApplication.translate("Dialog", u"4\ubc88 \uc0c1\ud488", None))
|
||||
self.sel_item11_7.setText(QCoreApplication.translate("Dialog", u"\uc774\ub984", None))
|
||||
self.sel_item12_14.setText(QCoreApplication.translate("Dialog", u"Tag", None))
|
||||
self.sel_item12_15.setText(QCoreApplication.translate("Dialog", u"\ub9ac\ubdf0\uc218", None))
|
||||
self.sel_item12_16.setText(QCoreApplication.translate("Dialog", u"\ucc1c\uc218", None))
|
||||
self.sel_item11_8.setText(QCoreApplication.translate("Dialog", u"\uac00 \uaca9", None))
|
||||
self.sel_item12_17.setText(QCoreApplication.translate("Dialog", u"\uad6c\ub9e4\uac74\uc218", None))
|
||||
self.groupBox_6.setTitle(QCoreApplication.translate("Dialog", u"5\ubc88 \uc0c1\ud488", None))
|
||||
self.sel_item11_9.setText(QCoreApplication.translate("Dialog", u"\uc774\ub984", None))
|
||||
self.sel_item12_18.setText(QCoreApplication.translate("Dialog", u"Tag", None))
|
||||
self.sel_item12_19.setText(QCoreApplication.translate("Dialog", u"\ub9ac\ubdf0\uc218", None))
|
||||
self.sel_item12_20.setText(QCoreApplication.translate("Dialog", u"\ucc1c\uc218", None))
|
||||
self.sel_item11_10.setText(QCoreApplication.translate("Dialog", u"\uac00 \uaca9", None))
|
||||
self.sel_item12_21.setText(QCoreApplication.translate("Dialog", u"\uad6c\ub9e4\uac74\uc218", None))
|
||||
self.urlgobtn.setText(QCoreApplication.translate("Dialog", u"GO", None))
|
||||
self.sel_item12_22.setText(QCoreApplication.translate("Dialog", u"Tag", None))
|
||||
self.matchbtn.setText(QCoreApplication.translate("Dialog", u"\ub9e4\uce6d", None))
|
||||
self.searchbtn_2.setText(QCoreApplication.translate("Dialog", u"\ud0a4\uc6cc\ub4dc \uac80\uc0c9", None))
|
||||
self.switchBtn.setText(QCoreApplication.translate("Dialog", u"PC-\ubaa8\ubc14\uc77c\n"
|
||||
"\uc804\ud658", None))
|
||||
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_1), QCoreApplication.translate("Dialog", u"\ubaa8\ubc14\uc77c\ud0ed-\ud14d\uc2a4\ud2b8\uac80\uc0c9", None))
|
||||
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), QCoreApplication.translate("Dialog", u"PC\ud0ed-\uc774\ubbf8\uc9c0\uac80\uc0c9", None))
|
||||
self.cat1.setText(QCoreApplication.translate("Dialog", u"\uce74\ud14c\uace0\ub9ac 1", None))
|
||||
self.cat2.setText(QCoreApplication.translate("Dialog", u"\uce74\ud14c\uace0\ub9ac 2", None))
|
||||
self.cat3.setText(QCoreApplication.translate("Dialog", u"\uce74\ud14c\uace0\ub9ac 3", None))
|
||||
self.cat4.setText(QCoreApplication.translate("Dialog", u"\uce74\ud14c\uace0\ub9ac 4", None))
|
||||
self.cat4_2.setText(QCoreApplication.translate("Dialog", u"\uce74\ud14c\uace0\ub9ac \ucf54\ub4dc", None))
|
||||
self.img_searchbtn.setText(QCoreApplication.translate("Dialog", u"\ud604\uc7ac \uc774\ubbf8\uc9c0 \uac80\uc0c9", None))
|
||||
self.backbtn.setText(QCoreApplication.translate("Dialog", u"\ub4a4\ub85c", None))
|
||||
self.forwardbtn.setText(QCoreApplication.translate("Dialog", u"\uc55e\uc73c\ub85c", None))
|
||||
self.sel_item12_4.setText(QCoreApplication.translate("Dialog", u"\uc5f0\uad00\ud0a4\uc6cc\ub4dc", None))
|
||||
self.taourl.setText(QCoreApplication.translate("Dialog", u"\ud0c0\uc624\ubc14\uc774 PC-URL", None))
|
||||
self.timerStart.setText(QCoreApplication.translate("Dialog", u"Start", None))
|
||||
self.timerStop.setText(QCoreApplication.translate("Dialog", u"Stop", None))
|
||||
self.timerSet.setText(QCoreApplication.translate("Dialog", u"Set", None))
|
||||
self.timerMinute.setText(QCoreApplication.translate("Dialog", u"60", None))
|
||||
self.timerSecond.setText(QCoreApplication.translate("Dialog", u"00", None))
|
||||
self.matchCount_2.setText(QCoreApplication.translate("Dialog", u"\ubd84", None))
|
||||
self.matchCount_3.setText(QCoreApplication.translate("Dialog", u"\ucd08", None))
|
||||
self.papagoApi.setText(QCoreApplication.translate("Dialog", u"PAPAGO API", None))
|
||||
# retranslateUi
|
||||
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<RCC>
|
||||
<qresource prefix="resources/magician.png">
|
||||
<file>magician.png</file>
|
||||
<file>쏘서러.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 27 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 154 KiB |
|
|
@ -0,0 +1,183 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Form</class>
|
||||
<widget class="QWidget" name="Form">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>892</width>
|
||||
<height>684</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>240</y>
|
||||
<width>451</width>
|
||||
<height>201</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string/>
|
||||
</property>
|
||||
<widget class="QTextBrowser" name="textBrowser">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>451</width>
|
||||
<height>171</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="html">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Gulim'; font-size:9pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">프로그램 이용 약관</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">1. 아래는 프로그램의 이용을 위한 약관에 </span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="checkBox">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>370</x>
|
||||
<y>180</y>
|
||||
<width>81</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>동의합니다</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QGroupBox" name="groupBox_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>450</y>
|
||||
<width>451</width>
|
||||
<height>191</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string/>
|
||||
</property>
|
||||
<widget class="QTextBrowser" name="textBrowser_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>451</width>
|
||||
<height>161</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="html">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Gulim'; font-size:9pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">개인정보 처리방침</p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="checkBox_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>360</x>
|
||||
<y>170</y>
|
||||
<width>81</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>동의합니다</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>-10</x>
|
||||
<y>-50</y>
|
||||
<width>401</width>
|
||||
<height>341</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="autoFillBackground">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="pixmap">
|
||||
<pixmap resource="resources/images.qrc">:/resources/magician.png/쏘서러.png</pixmap>
|
||||
</property>
|
||||
<property name="scaledContents">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>560</x>
|
||||
<y>100</y>
|
||||
<width>81</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>굴림</family>
|
||||
<pointsize>12</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>아이디</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLineEdit" name="lineEdit">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>650</x>
|
||||
<y>90</y>
|
||||
<width>201</width>
|
||||
<height>41</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>맑은 고딕</family>
|
||||
<pointsize>12</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="inputMask">
|
||||
<string>이메일 입력</string>
|
||||
</property>
|
||||
<property name="dragEnabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="clearButtonEnabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="resources/images.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
|
@ -0,0 +1,272 @@
|
|||
from pymongo import MongoClient, ASCENDING
|
||||
from werkzeug.security import generate_password_hash
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
# MongoDB 접속
|
||||
client = MongoClient('mongodb://root:1234@qcy2.duckdns.org:27017/')
|
||||
db = client['taobao_project'] # 사용할 데이터베이스 지정
|
||||
|
||||
# 이메일 필드에 대한 고유 인덱스 생성
|
||||
db.users.create_index([("email", ASCENDING)], unique=True)
|
||||
|
||||
# 현재 날짜와 시간
|
||||
now = datetime.now()
|
||||
|
||||
# 사용자 데이터 샘플
|
||||
users_data = [
|
||||
{
|
||||
"email": "testMaster1@gmail.com",
|
||||
"username": "테스트마스터1",
|
||||
"password": "1234",
|
||||
"userType": "master",
|
||||
"userGrade": 1, # 사용자 등급
|
||||
"joinDate": now.strftime('%Y-%m-%d %H:%M:%S'), # 가입일자
|
||||
"planStartDate": (now + timedelta(days=1)).strftime('%Y-%m-%d 00:00'), # 유료 플랜 시작일자
|
||||
"planEndDate": (now + timedelta(days=91)).strftime('%Y-%m-%d 00:00'), # 유료 플랜 종료일자
|
||||
"planDurationDays": 90, # 유료 플랜 기간
|
||||
"lastLoginTime": None, # 마지막 로그인 시간
|
||||
"lastLogoutTime": None, # 마지막 로그아웃 시간
|
||||
"totalWorkload": 100, # 총 작업량
|
||||
"weeklyPerformance": { # 주별 성과
|
||||
"2023-01": 20, # 예시: 2023년 1주차의 작업량
|
||||
"2023-02": 30, # 예시: 2023년 2주차의 작업량
|
||||
},
|
||||
"monthlyPerformance": { # 월별 성과
|
||||
"2023-01": 50, # 예시: 2023년 1월의 작업량
|
||||
"2023-02": 50, # 예시: 2023년 2월의 작업량
|
||||
}
|
||||
},
|
||||
|
||||
# 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조)
|
||||
{
|
||||
"email": "T1slave1@gmail.com",
|
||||
"username": "테스트1슬레이브1",
|
||||
"password": "1234",
|
||||
"userType": "slave",
|
||||
"master": "testMaster1@gmail.com", # 마스터 사용자 참조
|
||||
"lastLoginTime": None, # 마지막 로그인 시간
|
||||
"lastLogoutTime": None, # 마지막 로그아웃 시간
|
||||
"totalWorkload": 100, # 총 작업량
|
||||
"weeklyPerformance": { # 주별 성과
|
||||
"2023-01": 20, # 예시: 2023년 1주차의 작업량
|
||||
"2023-02": 30, # 예시: 2023년 2주차의 작업량
|
||||
},
|
||||
"monthlyPerformance": { # 월별 성과
|
||||
"2023-01": 50, # 예시: 2023년 1월의 작업량
|
||||
"2023-02": 50, # 예시: 2023년 2월의 작업량
|
||||
}
|
||||
},
|
||||
# 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조)
|
||||
{
|
||||
"email": "T1slave2@gmail.com",
|
||||
"username": "테스트1슬레이브2",
|
||||
"password": "1234",
|
||||
"userType": "slave",
|
||||
"master": "testMaster1@gmail.com", # 마스터 사용자 참조
|
||||
"lastLoginTime": None, # 마지막 로그인 시간
|
||||
"lastLogoutTime": None, # 마지막 로그아웃 시간
|
||||
"totalWorkload": 100, # 총 작업량
|
||||
"weeklyPerformance": { # 주별 성과
|
||||
"2023-01": 20, # 예시: 2023년 1주차의 작업량
|
||||
"2023-02": 30, # 예시: 2023년 2주차의 작업량
|
||||
},
|
||||
"monthlyPerformance": { # 월별 성과
|
||||
"2023-01": 50, # 예시: 2023년 1월의 작업량
|
||||
"2023-02": 50, # 예시: 2023년 2월의 작업량
|
||||
}
|
||||
},
|
||||
# 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조)
|
||||
{
|
||||
"email": "T1Manager@gmail.com",
|
||||
"username": "테스트1매니저",
|
||||
"password": "1234",
|
||||
"userType": "manager",
|
||||
"master": "testMaster1@gmail.com", # 마스터 사용자 참조
|
||||
"lastLoginTime": None, # 마지막 로그인 시간
|
||||
"lastLogoutTime": None, # 마지막 로그아웃 시간
|
||||
"totalWorkload": 100, # 총 작업량
|
||||
"weeklyPerformance": { # 주별 성과
|
||||
"2023-01": 20, # 예시: 2023년 1주차의 작업량
|
||||
"2023-02": 30, # 예시: 2023년 2주차의 작업량
|
||||
},
|
||||
"monthlyPerformance": { # 월별 성과
|
||||
"2023-01": 50, # 예시: 2023년 1월의 작업량
|
||||
"2023-02": 50, # 예시: 2023년 2월의 작업량
|
||||
}
|
||||
},
|
||||
{
|
||||
"email": "testMaster2@gmail.com",
|
||||
"username": "테스트마스터2",
|
||||
"password": "1234",
|
||||
"userType": "master",
|
||||
"userGrade": 2, # 사용자 등급
|
||||
"joinDate": now.strftime('%Y-%m-%d %H:%M:%S'), # 가입일자
|
||||
"planStartDate": (now + timedelta(days=1)).strftime('%Y-%m-%d 00:00'), # 유료 플랜 시작일자
|
||||
"planEndDate": (now + timedelta(days=31)).strftime('%Y-%m-%d 00:00'), # 유료 플랜 종료일자
|
||||
"planDurationDays": 30, # 유료 플랜 기간
|
||||
"lastLoginTime": None, # 마지막 로그인 시간
|
||||
"lastLogoutTime": None, # 마지막 로그아웃 시간
|
||||
"totalWorkload": 100, # 총 작업량
|
||||
"weeklyPerformance": { # 주별 성과
|
||||
"2023-01": 20, # 예시: 2023년 1주차의 작업량
|
||||
"2023-02": 30, # 예시: 2023년 2주차의 작업량
|
||||
},
|
||||
"monthlyPerformance": { # 월별 성과
|
||||
"2023-01": 50, # 예시: 2023년 1월의 작업량
|
||||
"2023-02": 50, # 예시: 2023년 2월의 작업량
|
||||
}
|
||||
},
|
||||
# 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조)
|
||||
{
|
||||
"email": "T2slave1@gmail.com",
|
||||
"username": "테스트2슬레이브1",
|
||||
"password": "1234",
|
||||
"userType": "slave",
|
||||
"master": "testMaster2@gmail.com", # 마스터 사용자 참조
|
||||
"lastLoginTime": None, # 마지막 로그인 시간
|
||||
"lastLogoutTime": None, # 마지막 로그아웃 시간
|
||||
"totalWorkload": 100, # 총 작업량
|
||||
"weeklyPerformance": { # 주별 성과
|
||||
"2023-01": 20, # 예시: 2023년 1주차의 작업량
|
||||
"2023-02": 30, # 예시: 2023년 2주차의 작업량
|
||||
},
|
||||
"monthlyPerformance": { # 월별 성과
|
||||
"2023-01": 50, # 예시: 2023년 1월의 작업량
|
||||
"2023-02": 50, # 예시: 2023년 2월의 작업량
|
||||
}
|
||||
},
|
||||
# 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조)
|
||||
{
|
||||
"email": "T2slave2@gmail.com",
|
||||
"username": "테스트2슬레이브2",
|
||||
"password": "1234",
|
||||
"userType": "slave",
|
||||
"master": "testMaster2@gmail.com", # 마스터 사용자 참조
|
||||
"lastLoginTime": None, # 마지막 로그인 시간
|
||||
"lastLogoutTime": None, # 마지막 로그아웃 시간
|
||||
"totalWorkload": 100, # 총 작업량
|
||||
"weeklyPerformance": { # 주별 성과
|
||||
"2023-01": 20, # 예시: 2023년 1주차의 작업량
|
||||
"2023-02": 30, # 예시: 2023년 2주차의 작업량
|
||||
},
|
||||
"monthlyPerformance": { # 월별 성과
|
||||
"2023-01": 50, # 예시: 2023년 1월의 작업량
|
||||
"2023-02": 50, # 예시: 2023년 2월의 작업량
|
||||
}
|
||||
},
|
||||
# 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조)
|
||||
{
|
||||
"email": "T2Manager@gmail.com",
|
||||
"username": "테스트2매니저",
|
||||
"password": "1234",
|
||||
"userType": "manager",
|
||||
"master": "testMaster2@gmail.com", # 마스터 사용자 참조
|
||||
"lastLoginTime": None, # 마지막 로그인 시간
|
||||
"lastLogoutTime": None, # 마지막 로그아웃 시간
|
||||
"totalWorkload": 100, # 총 작업량
|
||||
"weeklyPerformance": { # 주별 성과
|
||||
"2023-01": 20, # 예시: 2023년 1주차의 작업량
|
||||
"2023-02": 30, # 예시: 2023년 2주차의 작업량
|
||||
},
|
||||
"monthlyPerformance": { # 월별 성과
|
||||
"2023-01": 50, # 예시: 2023년 1월의 작업량
|
||||
"2023-02": 50, # 예시: 2023년 2월의 작업량
|
||||
}
|
||||
},
|
||||
{
|
||||
"email": "testMaster3@gmail.com",
|
||||
"username": "테스트마스터3",
|
||||
"password": "1234",
|
||||
"userType": "master",
|
||||
"userGrade": 3, # 사용자 등급
|
||||
"joinDate": now.strftime('%Y-%m-%d %H:%M:%S'), # 가입일자
|
||||
"planStartDate": (now + timedelta(days=1)).strftime('%Y-%m-%d 00:00'), # 유료 플랜 시작일자
|
||||
"planEndDate": (now + timedelta(days=8)).strftime('%Y-%m-%d 00:00'), # 유료 플랜 종료일자
|
||||
"planDurationDays": 7, # 유료 플랜 기간
|
||||
"lastLoginTime": None, # 마지막 로그인 시간
|
||||
"lastLogoutTime": None, # 마지막 로그아웃 시간
|
||||
"totalWorkload": 100, # 총 작업량
|
||||
"weeklyPerformance": { # 주별 성과
|
||||
"2023-01": 20, # 예시: 2023년 1주차의 작업량
|
||||
"2023-02": 30, # 예시: 2023년 2주차의 작업량
|
||||
},
|
||||
"monthlyPerformance": { # 월별 성과
|
||||
"2023-01": 50, # 예시: 2023년 1월의 작업량
|
||||
"2023-02": 50, # 예시: 2023년 2월의 작업량
|
||||
}
|
||||
},
|
||||
|
||||
# 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조)
|
||||
{
|
||||
"email": "T3slave1@gmail.com",
|
||||
"username": "테스트3슬레이브1",
|
||||
"password": "1234",
|
||||
"userType": "slave",
|
||||
"master": "testMaster3@gmail.com", # 마스터 사용자 참조
|
||||
"lastLoginTime": None, # 마지막 로그인 시간
|
||||
"lastLogoutTime": None, # 마지막 로그아웃 시간
|
||||
"totalWorkload": 100, # 총 작업량
|
||||
"weeklyPerformance": { # 주별 성과
|
||||
"2023-01": 20, # 예시: 2023년 1주차의 작업량
|
||||
"2023-02": 30, # 예시: 2023년 2주차의 작업량
|
||||
},
|
||||
"monthlyPerformance": { # 월별 성과
|
||||
"2023-01": 50, # 예시: 2023년 1월의 작업량
|
||||
"2023-02": 50, # 예시: 2023년 2월의 작업량
|
||||
}
|
||||
},
|
||||
# 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조)
|
||||
{
|
||||
"email": "T3slave2@gmail.com",
|
||||
"username": "테스트3슬레이브2",
|
||||
"password": "1234",
|
||||
"userType": "slave",
|
||||
"master": "testMaster3@gmail.com", # 마스터 사용자 참조
|
||||
"lastLoginTime": None, # 마지막 로그인 시간
|
||||
"lastLogoutTime": None, # 마지막 로그아웃 시간
|
||||
"totalWorkload": 100, # 총 작업량
|
||||
"weeklyPerformance": { # 주별 성과
|
||||
"2023-01": 20, # 예시: 2023년 1주차의 작업량
|
||||
"2023-02": 30, # 예시: 2023년 2주차의 작업량
|
||||
},
|
||||
"monthlyPerformance": { # 월별 성과
|
||||
"2023-01": 50, # 예시: 2023년 1월의 작업량
|
||||
"2023-02": 50, # 예시: 2023년 2월의 작업량
|
||||
}
|
||||
},
|
||||
# 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조)
|
||||
{
|
||||
"email": "T3Manager@gmail.com",
|
||||
"username": "테스트3매니저",
|
||||
"password": "1234",
|
||||
"userType": "manager",
|
||||
"master": "testMaster3@gmail.com", # 마스터 사용자 참조
|
||||
"lastLoginTime": None, # 마지막 로그인 시간
|
||||
"lastLogoutTime": None, # 마지막 로그아웃 시간
|
||||
"totalWorkload": 100, # 총 작업량
|
||||
"weeklyPerformance": { # 주별 성과
|
||||
"2023-01": 20, # 예시: 2023년 1주차의 작업량
|
||||
"2023-02": 30, # 예시: 2023년 2주차의 작업량
|
||||
},
|
||||
"monthlyPerformance": { # 월별 성과
|
||||
"2023-01": 50, # 예시: 2023년 1월의 작업량
|
||||
"2023-02": 50, # 예시: 2023년 2월의 작업량
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
# # 사용자 정보 저장
|
||||
# for user in users_data:
|
||||
# user['password'] = generate_password_hash(user['password']) # 비밀번호 해싱
|
||||
# db.users.insert_one(user)
|
||||
|
||||
|
||||
# 사용자 정보 업데이트 또는 추가
|
||||
for user in users_data:
|
||||
user['password'] = generate_password_hash(user['password']) # 비밀번호 해싱
|
||||
# upsert=True 옵션을 사용하여, 문서가 없으면 추가하고, 있으면 업데이트
|
||||
db.users.update_one(
|
||||
{"email": user['email']},
|
||||
{"$set": user},
|
||||
upsert=True
|
||||
)
|
||||
|
|
@ -0,0 +1,272 @@
|
|||
from pymongo import MongoClient, ASCENDING
|
||||
from werkzeug.security import generate_password_hash
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
# MongoDB 접속
|
||||
client = MongoClient('mongodb://root:1234@cckb9998.synology.me:27017/')
|
||||
db = client['taobao_project'] # 사용할 데이터베이스 지정
|
||||
|
||||
# 이메일 필드에 대한 고유 인덱스 생성
|
||||
db.users.create_index([("email", ASCENDING)], unique=True)
|
||||
|
||||
# 현재 날짜와 시간
|
||||
now = datetime.now()
|
||||
|
||||
# 사용자 데이터 샘플
|
||||
users_data = [
|
||||
{
|
||||
"email": "testMaster1@gmail.com",
|
||||
"username": "테스트마스터1",
|
||||
"password": "1234",
|
||||
"userType": "master",
|
||||
"userGrade": 1, # 사용자 등급
|
||||
"joinDate": now.strftime('%Y-%m-%d %H:%M:%S'), # 가입일자
|
||||
"planStartDate": (now + timedelta(days=1)).strftime('%Y-%m-%d 00:00'), # 유료 플랜 시작일자
|
||||
"planEndDate": (now + timedelta(days=91)).strftime('%Y-%m-%d 00:00'), # 유료 플랜 종료일자
|
||||
"planDurationDays": 90, # 유료 플랜 기간
|
||||
"lastLoginTime": None, # 마지막 로그인 시간
|
||||
"lastLogoutTime": None, # 마지막 로그아웃 시간
|
||||
"totalWorkload": 100, # 총 작업량
|
||||
"weeklyPerformance": { # 주별 성과
|
||||
"2023-01": 20, # 예시: 2023년 1주차의 작업량
|
||||
"2023-02": 30, # 예시: 2023년 2주차의 작업량
|
||||
},
|
||||
"monthlyPerformance": { # 월별 성과
|
||||
"2023-01": 50, # 예시: 2023년 1월의 작업량
|
||||
"2023-02": 50, # 예시: 2023년 2월의 작업량
|
||||
}
|
||||
},
|
||||
|
||||
# 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조)
|
||||
{
|
||||
"email": "T1slave1@gmail.com",
|
||||
"username": "테스트1슬레이브1",
|
||||
"password": "1234",
|
||||
"userType": "slave",
|
||||
"master": "testMaster1@gmail.com", # 마스터 사용자 참조
|
||||
"lastLoginTime": None, # 마지막 로그인 시간
|
||||
"lastLogoutTime": None, # 마지막 로그아웃 시간
|
||||
"totalWorkload": 100, # 총 작업량
|
||||
"weeklyPerformance": { # 주별 성과
|
||||
"2023-01": 20, # 예시: 2023년 1주차의 작업량
|
||||
"2023-02": 30, # 예시: 2023년 2주차의 작업량
|
||||
},
|
||||
"monthlyPerformance": { # 월별 성과
|
||||
"2023-01": 50, # 예시: 2023년 1월의 작업량
|
||||
"2023-02": 50, # 예시: 2023년 2월의 작업량
|
||||
}
|
||||
},
|
||||
# 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조)
|
||||
{
|
||||
"email": "T1slave2@gmail.com",
|
||||
"username": "테스트1슬레이브2",
|
||||
"password": "1234",
|
||||
"userType": "slave",
|
||||
"master": "testMaster1@gmail.com", # 마스터 사용자 참조
|
||||
"lastLoginTime": None, # 마지막 로그인 시간
|
||||
"lastLogoutTime": None, # 마지막 로그아웃 시간
|
||||
"totalWorkload": 100, # 총 작업량
|
||||
"weeklyPerformance": { # 주별 성과
|
||||
"2023-01": 20, # 예시: 2023년 1주차의 작업량
|
||||
"2023-02": 30, # 예시: 2023년 2주차의 작업량
|
||||
},
|
||||
"monthlyPerformance": { # 월별 성과
|
||||
"2023-01": 50, # 예시: 2023년 1월의 작업량
|
||||
"2023-02": 50, # 예시: 2023년 2월의 작업량
|
||||
}
|
||||
},
|
||||
# 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조)
|
||||
{
|
||||
"email": "T1Manager@gmail.com",
|
||||
"username": "테스트1매니저",
|
||||
"password": "1234",
|
||||
"userType": "manager",
|
||||
"master": "testMaster1@gmail.com", # 마스터 사용자 참조
|
||||
"lastLoginTime": None, # 마지막 로그인 시간
|
||||
"lastLogoutTime": None, # 마지막 로그아웃 시간
|
||||
"totalWorkload": 100, # 총 작업량
|
||||
"weeklyPerformance": { # 주별 성과
|
||||
"2023-01": 20, # 예시: 2023년 1주차의 작업량
|
||||
"2023-02": 30, # 예시: 2023년 2주차의 작업량
|
||||
},
|
||||
"monthlyPerformance": { # 월별 성과
|
||||
"2023-01": 50, # 예시: 2023년 1월의 작업량
|
||||
"2023-02": 50, # 예시: 2023년 2월의 작업량
|
||||
}
|
||||
},
|
||||
{
|
||||
"email": "testMaster2@gmail.com",
|
||||
"username": "테스트마스터2",
|
||||
"password": "1234",
|
||||
"userType": "master",
|
||||
"userGrade": 2, # 사용자 등급
|
||||
"joinDate": now.strftime('%Y-%m-%d %H:%M:%S'), # 가입일자
|
||||
"planStartDate": (now + timedelta(days=1)).strftime('%Y-%m-%d 00:00'), # 유료 플랜 시작일자
|
||||
"planEndDate": (now + timedelta(days=31)).strftime('%Y-%m-%d 00:00'), # 유료 플랜 종료일자
|
||||
"planDurationDays": 30, # 유료 플랜 기간
|
||||
"lastLoginTime": None, # 마지막 로그인 시간
|
||||
"lastLogoutTime": None, # 마지막 로그아웃 시간
|
||||
"totalWorkload": 100, # 총 작업량
|
||||
"weeklyPerformance": { # 주별 성과
|
||||
"2023-01": 20, # 예시: 2023년 1주차의 작업량
|
||||
"2023-02": 30, # 예시: 2023년 2주차의 작업량
|
||||
},
|
||||
"monthlyPerformance": { # 월별 성과
|
||||
"2023-01": 50, # 예시: 2023년 1월의 작업량
|
||||
"2023-02": 50, # 예시: 2023년 2월의 작업량
|
||||
}
|
||||
},
|
||||
# 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조)
|
||||
{
|
||||
"email": "T2slave1@gmail.com",
|
||||
"username": "테스트2슬레이브1",
|
||||
"password": "1234",
|
||||
"userType": "slave",
|
||||
"master": "testMaster2@gmail.com", # 마스터 사용자 참조
|
||||
"lastLoginTime": None, # 마지막 로그인 시간
|
||||
"lastLogoutTime": None, # 마지막 로그아웃 시간
|
||||
"totalWorkload": 100, # 총 작업량
|
||||
"weeklyPerformance": { # 주별 성과
|
||||
"2023-01": 20, # 예시: 2023년 1주차의 작업량
|
||||
"2023-02": 30, # 예시: 2023년 2주차의 작업량
|
||||
},
|
||||
"monthlyPerformance": { # 월별 성과
|
||||
"2023-01": 50, # 예시: 2023년 1월의 작업량
|
||||
"2023-02": 50, # 예시: 2023년 2월의 작업량
|
||||
}
|
||||
},
|
||||
# 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조)
|
||||
{
|
||||
"email": "T2slave2@gmail.com",
|
||||
"username": "테스트2슬레이브2",
|
||||
"password": "1234",
|
||||
"userType": "slave",
|
||||
"master": "testMaster2@gmail.com", # 마스터 사용자 참조
|
||||
"lastLoginTime": None, # 마지막 로그인 시간
|
||||
"lastLogoutTime": None, # 마지막 로그아웃 시간
|
||||
"totalWorkload": 100, # 총 작업량
|
||||
"weeklyPerformance": { # 주별 성과
|
||||
"2023-01": 20, # 예시: 2023년 1주차의 작업량
|
||||
"2023-02": 30, # 예시: 2023년 2주차의 작업량
|
||||
},
|
||||
"monthlyPerformance": { # 월별 성과
|
||||
"2023-01": 50, # 예시: 2023년 1월의 작업량
|
||||
"2023-02": 50, # 예시: 2023년 2월의 작업량
|
||||
}
|
||||
},
|
||||
# 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조)
|
||||
{
|
||||
"email": "T2Manager@gmail.com",
|
||||
"username": "테스트2매니저",
|
||||
"password": "1234",
|
||||
"userType": "manager",
|
||||
"master": "testMaster2@gmail.com", # 마스터 사용자 참조
|
||||
"lastLoginTime": None, # 마지막 로그인 시간
|
||||
"lastLogoutTime": None, # 마지막 로그아웃 시간
|
||||
"totalWorkload": 100, # 총 작업량
|
||||
"weeklyPerformance": { # 주별 성과
|
||||
"2023-01": 20, # 예시: 2023년 1주차의 작업량
|
||||
"2023-02": 30, # 예시: 2023년 2주차의 작업량
|
||||
},
|
||||
"monthlyPerformance": { # 월별 성과
|
||||
"2023-01": 50, # 예시: 2023년 1월의 작업량
|
||||
"2023-02": 50, # 예시: 2023년 2월의 작업량
|
||||
}
|
||||
},
|
||||
{
|
||||
"email": "testMaster3@gmail.com",
|
||||
"username": "테스트마스터3",
|
||||
"password": "1234",
|
||||
"userType": "master",
|
||||
"userGrade": 3, # 사용자 등급
|
||||
"joinDate": now.strftime('%Y-%m-%d %H:%M:%S'), # 가입일자
|
||||
"planStartDate": (now + timedelta(days=1)).strftime('%Y-%m-%d 00:00'), # 유료 플랜 시작일자
|
||||
"planEndDate": (now + timedelta(days=8)).strftime('%Y-%m-%d 00:00'), # 유료 플랜 종료일자
|
||||
"planDurationDays": 7, # 유료 플랜 기간
|
||||
"lastLoginTime": None, # 마지막 로그인 시간
|
||||
"lastLogoutTime": None, # 마지막 로그아웃 시간
|
||||
"totalWorkload": 100, # 총 작업량
|
||||
"weeklyPerformance": { # 주별 성과
|
||||
"2023-01": 20, # 예시: 2023년 1주차의 작업량
|
||||
"2023-02": 30, # 예시: 2023년 2주차의 작업량
|
||||
},
|
||||
"monthlyPerformance": { # 월별 성과
|
||||
"2023-01": 50, # 예시: 2023년 1월의 작업량
|
||||
"2023-02": 50, # 예시: 2023년 2월의 작업량
|
||||
}
|
||||
},
|
||||
|
||||
# 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조)
|
||||
{
|
||||
"email": "T3slave1@gmail.com",
|
||||
"username": "테스트3슬레이브1",
|
||||
"password": "1234",
|
||||
"userType": "slave",
|
||||
"master": "testMaster3@gmail.com", # 마스터 사용자 참조
|
||||
"lastLoginTime": None, # 마지막 로그인 시간
|
||||
"lastLogoutTime": None, # 마지막 로그아웃 시간
|
||||
"totalWorkload": 100, # 총 작업량
|
||||
"weeklyPerformance": { # 주별 성과
|
||||
"2023-01": 20, # 예시: 2023년 1주차의 작업량
|
||||
"2023-02": 30, # 예시: 2023년 2주차의 작업량
|
||||
},
|
||||
"monthlyPerformance": { # 월별 성과
|
||||
"2023-01": 50, # 예시: 2023년 1월의 작업량
|
||||
"2023-02": 50, # 예시: 2023년 2월의 작업량
|
||||
}
|
||||
},
|
||||
# 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조)
|
||||
{
|
||||
"email": "T3slave2@gmail.com",
|
||||
"username": "테스트3슬레이브2",
|
||||
"password": "1234",
|
||||
"userType": "slave",
|
||||
"master": "testMaster3@gmail.com", # 마스터 사용자 참조
|
||||
"lastLoginTime": None, # 마지막 로그인 시간
|
||||
"lastLogoutTime": None, # 마지막 로그아웃 시간
|
||||
"totalWorkload": 100, # 총 작업량
|
||||
"weeklyPerformance": { # 주별 성과
|
||||
"2023-01": 20, # 예시: 2023년 1주차의 작업량
|
||||
"2023-02": 30, # 예시: 2023년 2주차의 작업량
|
||||
},
|
||||
"monthlyPerformance": { # 월별 성과
|
||||
"2023-01": 50, # 예시: 2023년 1월의 작업량
|
||||
"2023-02": 50, # 예시: 2023년 2월의 작업량
|
||||
}
|
||||
},
|
||||
# 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조)
|
||||
{
|
||||
"email": "T3Manager@gmail.com",
|
||||
"username": "테스트3매니저",
|
||||
"password": "1234",
|
||||
"userType": "manager",
|
||||
"master": "testMaster3@gmail.com", # 마스터 사용자 참조
|
||||
"lastLoginTime": None, # 마지막 로그인 시간
|
||||
"lastLogoutTime": None, # 마지막 로그아웃 시간
|
||||
"totalWorkload": 100, # 총 작업량
|
||||
"weeklyPerformance": { # 주별 성과
|
||||
"2023-01": 20, # 예시: 2023년 1주차의 작업량
|
||||
"2023-02": 30, # 예시: 2023년 2주차의 작업량
|
||||
},
|
||||
"monthlyPerformance": { # 월별 성과
|
||||
"2023-01": 50, # 예시: 2023년 1월의 작업량
|
||||
"2023-02": 50, # 예시: 2023년 2월의 작업량
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
# # 사용자 정보 저장
|
||||
# for user in users_data:
|
||||
# user['password'] = generate_password_hash(user['password']) # 비밀번호 해싱
|
||||
# db.users.insert_one(user)
|
||||
|
||||
|
||||
# 사용자 정보 업데이트 또는 추가
|
||||
for user in users_data:
|
||||
user['password'] = generate_password_hash(user['password']) # 비밀번호 해싱
|
||||
# upsert=True 옵션을 사용하여, 문서가 없으면 추가하고, 있으면 업데이트
|
||||
db.users.update_one(
|
||||
{"email": user['email']},
|
||||
{"$set": user},
|
||||
upsert=True
|
||||
)
|
||||
Loading…
Reference in New Issue