일부 수정

This commit is contained in:
R5600U_PC 2024-04-25 11:10:11 +09:00
parent 2e1cec850b
commit d6dd20b170
5 changed files with 104 additions and 49 deletions

View File

@ -17,4 +17,4 @@ for folder in folders_to_delete:
# 디버깅용 : main.spec # 디버깅용 : main.spec
# 배포용 : AutoPercenty.spec # 배포용 : AutoPercenty.spec
call(['pyinstaller', 'delv.spec']) call(['pyinstaller', 'delv_py.spec'])

Binary file not shown.

12
config.ini Normal file
View File

@ -0,0 +1,12 @@
[Settings]
maxweightset = 25
maxlengthset = 100
maxvolumeset = 160
addfeeinterval = 5
addfeesetting = 20
addfee = 5000
fontsize = 14
weightinterval = 0.5
setsavesetting = True
favoritedelv = 넥스트위해평택해운(배송비)

127
delv.py
View File

@ -1,4 +1,6 @@
import sys import sys
import configparser
import os
import pandas as pd import pandas as pd
import logging import logging
from PyQt5.QtCore import Qt from PyQt5.QtCore import Qt
@ -7,17 +9,25 @@ from PyQt5.QtGui import QFont
import re import re
from src.toggleSwitch import ToggleSwitch # toggleSwitch.py 파일에서 ToggleSwitch 클래스를 임포트 from src.toggleSwitch import ToggleSwitch # toggleSwitch.py 파일에서 ToggleSwitch 클래스를 임포트
from src.logger_module import setup_logger from src.logger_module import setup_logger
import logging import ctypes
def minimize_console():
""" 콘솔 창을 최소화하는 함수 """
hwnd = ctypes.windll.kernel32.GetConsoleWindow()
if hwnd != 0:
ctypes.windll.user32.ShowWindow(hwnd, 6) # SW_MINIMIZE
class DeliveryFeeCalculator(QtWidgets.QWidget): class DeliveryFeeCalculator(QtWidgets.QWidget):
def __init__(self, logger): def __init__(self, logger):
super().__init__() super().__init__()
self.logger = logger self.logger = logger
self.config = configparser.ConfigParser()
self.config_path = 'config.ini'
self.maxWeightSet = 25 self.maxWeightSet = 25
self.maxLengthSet = 100 self.maxLengthSet = 100
self.maxVolumeSet = 155 self.maxVolumeSet = 160
self.currentMaxLength = 1 self.currentMaxLength = 1
self.roundVolume = 1 self.roundVolume = 1
self.currentWeight = 1 self.currentWeight = 1
@ -55,49 +65,78 @@ class DeliveryFeeCalculator(QtWidgets.QWidget):
self.setComboBox() self.setComboBox()
def initSettings(self): def initSettings(self):
self.settings = QtCore.QSettings('When_Ride_Mycar_Tanya', 'DeliveryFeeCalculator') # self.settings = QtCore.QSettings('When_Ride_Mycar_Tanya', 'DeliveryFeeCalculator')
self.loadSettings() self.loadSettings()
def loadSettings(self): def loadSettings(self):
self.maxWeightSet = self.settings.value('maxWeightSet', 25, type=int) """ 설정 파일을 불러옵니다. """
self.maxLengthSet = self.settings.value('maxLengthSet', 100, type=int) if not os.path.exists(self.config_path):
self.maxVolumeSet = self.settings.value('maxVolumeSet', 155, type=int) self.create_default_settings()
self.addFeeInterval = self.settings.value('addFeeInterval', 5, type=int) self.config.read(self.config_path)
self.addFeeSetting = self.settings.value('addFeeSetting', 20, type=int)
self.addFee = self.settings.value('addFee', 0, type=int) self.maxWeightSet = self.config.getint('Settings', 'maxWeightSet', fallback=25)
self.fontSize = self.settings.value('fontSize', 14, type=int) self.maxLengthSet = self.config.getint('Settings', 'maxLengthSet', fallback=100)
self.weightInterval = self.settings.value('weightInterval', 0.5, type=float) self.maxVolumeSet = self.config.getint('Settings', 'maxVolumeSet', fallback=160)
self.setSaveSetting = self.settings.value('setSaveSetting', False, type=bool) self.addFeeInterval = self.config.getint('Settings', 'addFeeInterval', fallback=5)
self.favoriteDelv = self.settings.value('favoriteDelv', "노빠꾸해운(배송비)", type=str) self.addFeeSetting = self.config.getint('Settings', 'addFeeSetting', fallback=20)
self.addFee = self.config.getint('Settings', 'addFee', fallback=1000)
self.fontSize = self.config.getint('Settings', 'fontSize', fallback=14)
self.weightInterval = self.config.getfloat('Settings', 'weightInterval', fallback=0.5)
self.setSaveSetting = self.config.getboolean('Settings', 'setSaveSetting', fallback=False)
self.favoriteDelv = self.config.get('Settings', 'favoriteDelv', fallback="노빠꾸해운(배송비)")
def saveSettings(self): def saveSettings(self):
self.settings.setValue('maxWeightSet', self.maxWeightSet) """ 설정을 config.ini 파일에 저장합니다. """
self.settings.setValue('maxLengthSet', self.maxLengthSet) if not self.config.has_section('Settings'):
self.settings.setValue('maxVolumeSet', self.maxVolumeSet) self.config.add_section('Settings')
self.settings.setValue('addFeeInterval', self.addFeeInterval)
self.settings.setValue('addFeeSetting', self.addFeeSetting) self.config.set('Settings', 'maxWeightSet', str(self.maxWeightSet))
self.settings.setValue('addFee', self.addFee) self.config.set('Settings', 'maxLengthSet', str(self.maxLengthSet))
self.settings.setValue('fontSize', self.fontSize) self.config.set('Settings', 'maxVolumeSet', str(self.maxVolumeSet))
self.settings.setValue('weightInterval', self.weightInterval) self.config.set('Settings', 'addFeeInterval', str(self.addFeeInterval))
self.settings.setValue('setSaveSetting', self.setSaveSetting) self.config.set('Settings', 'addFeeSetting', str(self.addFeeSetting))
self.settings.setValue('favoriteDelv', self.favoriteDelv) self.config.set('Settings', 'addFee', str(self.addFee))
self.config.set('Settings', 'fontSize', str(self.fontSize))
self.config.set('Settings', 'weightInterval', str(self.weightInterval))
self.config.set('Settings', 'setSaveSetting', str(self.setSaveSetting))
self.config.set('Settings', 'favoriteDelv', str(self.favoriteDelv))
with open(self.config_path, 'w') as configfile:
self.config.write(configfile)
def loadWindowSettings(self): def create_default_settings(self):
# 윈도우 위치와 크기 설정을 불러옵니다 """ 기본 설정을 생성합니다. """
self.resize(self.settings.value("windowSize", QtCore.QSize(400, 300))) self.config['Settings'] = {
self.move(self.settings.value("windowPosition", QtCore.QPoint(50, 50))) 'maxWeightSet': '25',
'maxLengthSet': '100',
'maxVolumeSet': '160',
'addFeeInterval': '5',
'addFeeSetting': '20',
'addFee': '1000',
'fontSize': '14',
'weightInterval': '0.5',
'setSaveSetting': 'False',
'favoriteDelv': "노빠꾸해운(배송비)"
}
with open(self.config_path, 'w') as configfile:
self.config.write(configfile)
def saveWindowSettings(self): # def loadWindowSettings(self):
# 윈도우 위치와 크기 설정을 저장합니다 # # 윈도우 위치와 크기 설정을 불러옵니다
self.settings.setValue("windowSize", self.size()) # self.resize(self.settings.value("windowSize", QtCore.QSize(400, 300)))
self.settings.setValue("windowPosition", self.pos()) # self.move(self.settings.value("windowPosition", QtCore.QPoint(50, 50)))
# def saveWindowSettings(self):
# # 윈도우 위치와 크기 설정을 저장합니다
# self.settings.setValue("windowSize", self.size())
# self.settings.setValue("windowPosition", self.pos())
def closeEvent(self, event): def closeEvent(self, event):
# 종료 이벤트가 발생할 때 설정 저장 # 종료 이벤트가 발생할 때 설정 저장
if self.setSaveSetting: if self.setSaveSetting:
logger.debug("설정값 저장") logger.debug("설정값 저장")
self.saveSettings() self.saveSettings()
self.saveWindowSettings() # self.saveWindowSettings()
else: else:
logger.debug("설정값 저장하지 않음") logger.debug("설정값 저장하지 않음")
@ -373,9 +412,9 @@ class DeliveryFeeCalculator(QtWidgets.QWidget):
if sheet.endswith('(배송비)'): if sheet.endswith('(배송비)'):
self.comboBox.addItem(sheet) self.comboBox.addItem(sheet)
logging.info('Excel file loaded successfully.') logger.debug('Excel file loaded successfully.')
except Exception as e: except Exception as e:
logging.error(f"Error loading Excel file: {e}") logger.error(f"Error loading Excel file: {e}")
QtWidgets.QMessageBox.critical(self, "Error", "Failed to load the Excel file.") QtWidgets.QMessageBox.critical(self, "Error", "Failed to load the Excel file.")
def processSheet(self, df, sheet_name, key): def processSheet(self, df, sheet_name, key):
@ -388,7 +427,7 @@ class DeliveryFeeCalculator(QtWidgets.QWidget):
fee = int(fee_str) fee = int(fee_str)
records.append({key: value, '배송비': fee}) records.append({key: value, '배송비': fee})
except ValueError as e: except ValueError as e:
logging.error(f"Error converting values in row {index} of sheet {sheet_name}: {e}") logger.error(f"Error converting values in row {index} of sheet {sheet_name}: {e}")
continue continue
self.deliveryFees[sheet_name] = records self.deliveryFees[sheet_name] = records
@ -403,9 +442,9 @@ class DeliveryFeeCalculator(QtWidgets.QWidget):
def updateDeliveryFee(self): def updateDeliveryFee(self):
try: try:
weight = self.weightInput.value() weight = self.weightInput.value()
logger.debug(f"현재 선택된 무게 : {weight}") # logger.debug(f"현재 선택된 무게 : {weight}")
selected_sheet = self.comboBox.currentText() selected_sheet = self.comboBox.currentText()
logger.debug(f"현재 선택된 시트 : {selected_sheet}") # logger.debug(f"현재 선택된 시트 : {selected_sheet}")
fees = self.deliveryFees.get(selected_sheet, []) fees = self.deliveryFees.get(selected_sheet, [])
fee = 0 fee = 0
# 가능한 모든 무게를 리스트로 가져오고 정렬 # 가능한 모든 무게를 리스트로 가져오고 정렬
@ -435,7 +474,7 @@ class DeliveryFeeCalculator(QtWidgets.QWidget):
else: else:
self.deliveryFeeLabel.setText(f'배송비: {int(fee): ,}') self.deliveryFeeLabel.setText(f'배송비: {int(fee): ,}')
logger.debug(f"배송비 deliveryFeeLabel에 업데이트: {int(fee): ,}") # logger.debug(f"배송비 deliveryFeeLabel에 업데이트: {int(fee): ,}원")
# 폰트와 밑줄 설정 # 폰트와 밑줄 설정
font = QFont() font = QFont()
@ -447,7 +486,7 @@ class DeliveryFeeCalculator(QtWidgets.QWidget):
self.additionalFee() self.additionalFee()
except Exception as e: except Exception as e:
logger.debug(f"Error updating delivery fee: {e}") logger.error(f"Error updating delivery fee: {e}")
self.deliveryFeeLabel.setText("배송비 업데이트 중 오류 발생") self.deliveryFeeLabel.setText("배송비 업데이트 중 오류 발생")
def updateAdditionalDeliveryFee(self): def updateAdditionalDeliveryFee(self):
@ -513,7 +552,7 @@ class DeliveryFeeCalculator(QtWidgets.QWidget):
self.additionalFeeLabel.setText(f'경동 택배비[{price_source}]: {fee}') self.additionalFeeLabel.setText(f'경동 택배비[{price_source}]: {fee}')
except Exception as e: except Exception as e:
logger.debug(f"Error updating Additional delivery fee: {e}") logger.error(f"Error updating Additional delivery fee: {e}")
self.additionalFeeLabel.setText("배송비 업데이트 중 오류 발생") self.additionalFeeLabel.setText("배송비 업데이트 중 오류 발생")
@ -529,8 +568,8 @@ class DeliveryFeeCalculator(QtWidgets.QWidget):
if self.favoriteDelv: if self.favoriteDelv:
index = self.comboBox.findText(self.favoriteDelv) index = self.comboBox.findText(self.favoriteDelv)
logger.debug(f"저장된 배대지가 존재함: {self.favoriteDelv}") logger.debug(f"저장된 배대지가 존재함: {self.favoriteDelv}")
if index >= 0: if index >= 0:
self.comboBox.setCurrentIndex(index) self.comboBox.setCurrentIndex(index)
else: else:
logger.debug("저장된 배대지가 엑셀시트에 존재하지 않습니다.") logger.debug("저장된 배대지가 엑셀시트에 존재하지 않습니다.")
@ -661,8 +700,10 @@ class DeliveryFeeCalculator(QtWidgets.QWidget):
self.setComboBox() self.setComboBox()
if __name__ == '__main__': if __name__ == '__main__':
minimize_console()
app = QtWidgets.QApplication(sys.argv) app = QtWidgets.QApplication(sys.argv)
logger = setup_logger('default_logger', 'delivery_calc.log', level=logging.DEBUG) logger = setup_logger('default_logger', 'delivery_calc.log', level=logging.INFO)
ex = DeliveryFeeCalculator(logger) ex = DeliveryFeeCalculator(logger)
ex.show() ex.show()
sys.exit(app.exec_()) sys.exit(app.exec_())

View File

@ -3,10 +3,12 @@
a = Analysis( a = Analysis(
['delv.py'], ['delv.py'],
pathex=[], pathex=['H:\\py\\delvfee'],
binaries=[], binaries=[],
datas=[], datas=[],
hiddenimports=[], hiddenimports=[
'sip', 'jinja2'
],
hookspath=[], hookspath=[],
hooksconfig={}, hooksconfig={},
runtime_hooks=[], runtime_hooks=[],
@ -21,12 +23,12 @@ exe = EXE(
a.scripts, a.scripts,
[], [],
exclude_binaries=True, exclude_binaries=True,
name='delv', name='Deliver_Calc',
debug=False, debug=False,
bootloader_ignore_signals=False, bootloader_ignore_signals=False,
strip=False, strip=False,
upx=True, upx=True,
console=False, console=True,
disable_windowed_traceback=False, disable_windowed_traceback=False,
argv_emulation=False, argv_emulation=False,
target_arch=None, target_arch=None,
@ -41,5 +43,5 @@ coll = COLLECT(
strip=False, strip=False,
upx=True, upx=True,
upx_exclude=[], upx_exclude=[],
name='delv', name='Deliver_Calc',
) )