123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314 |
- # -*- coding: utf-8 -*-
- '''
- @Project :Scan
- @File :ScanInput.py
- @Author :Leslie
- @Date :2023/5/6 9:03
- '''
- import time
- from PyQt5.QtCore import QCoreApplication
- from PyQt5.QtGui import QIcon
- from PyQt5.QtWidgets import QFileDialog, QMessageBox
- from pip._vendor import chardet
- import Config
- from Config import Configuration
- from Dialog.Dialogadd import Dialogadd
- from ui.Scan import Ui_Form
- softwareIconPath = r'./pic/scan.png'
- folderName = 'material'
- # softwareIconPath = r'./pic/scan.png'
- from PyQt5.QtCore import *
- from PyQt5.QtGui import *
- from PyQt5.QtWidgets import *
- class ScanInput(QWidget):
- my_signal = pyqtSignal(str)
- def __init__(self, versionCode='538614100080FA2A',productDate="2023年5月31日",fileName="538614100080F293_2023年5月31日.txt",directory="C:/Users/lili/Desktop/material",parent=None, closeToDlg=None):
- super(ScanInput, self).__init__(parent)
- self.ui = Ui_Form()
- self.ui.setupUi(self)
- self.setWindowTitle("物料扫码")
- self.setWindowIcon(QIcon(softwareIconPath))
- self.directory = directory
- self.fileName = fileName
- self.ui.versionCode.setText(versionCode)
- self.ui.Deliverydate.setText(productDate)
- self.QComboBoxnit()
- self.ui.save.clicked.connect(self.saveFile)
- self.ui.open.clicked.connect(self.actOpenTriggered)
- self.ui.materialType.currentTextChanged.connect(self.materialTypeChanged)
- QMessageBox.information(self, '提示', '请在英文输入法状态下进行扫码操作')
- # 线程传参
- self.autoSave = AutoSaveThread(self,directory,self.fileName)
- self.autoSave.start()
- self.my_signal.connect(self.autoSave.my_slot)
- def send_value(self, value):
- self.my_signal.emit(value)
- # 下拉框属性
- def getParamDict(self):
- paramDict = Config.Configuration().getConfiguration()
- return paramDict
- # 下拉框初始化
- def QComboBoxnit(self):
- paramDict = self.getParamDict()
- for item in paramDict:
- item = str(item)
- self.ui.materialType.addItem(item)
- # 打开文件
- def actOpenTriggered(self):
- versionCode = self.ui.versionCode.text()
- deliveryDate = self.ui.Deliverydate.text()
- selectPath = self.directory
- QMessageBox.information(self, '提示', f'请选择以版本代码\'{versionCode}\'+发料日期\'{deliveryDate}\'为开头的.txt文件')
- QFileName = QFileDialog.getOpenFileName(self, "选取文件", selectPath,
- "文本文件(*.txt)")
- if QFileName[0]:
- fileName = QFileName[0].split("/")[-1]
- fileNameAll = QFileName[0].split("/")[-1].split(".")[0]
- self.fileName = fileName
- self.send_value(fileName)
- fileNameBegin = versionCode + "_"+deliveryDate
- if fileNameAll.startswith(fileNameBegin):
- with open(QFileName[0], "rb") as f:
- data = f.read()
- result = chardet.detect(data)
- encoding = result["encoding"]
- if encoding is not None:
- data = data.decode(encoding)
- self.ui.plainTextEdit.setPlainText(data)
- else:
- QMessageBox.critical(self,'错误',f'请选择以版本代码\'{versionCode}\'+发料日期\'{deliveryDate}\'为开头的.txt文件')
- def actSaveAsTriggered(self):
- desktopPath = Configuration().get_desktop()
- versionCode = self.ui.versionCode.text()
- Deliverydate = self.ui.Deliverydate.text()
- filenameStr = versionCode + "_" + Deliverydate + ".txt"
- filePathName = desktopPath + '\\' + folderName + '\\' + filenameStr
- aFileName = QFileDialog.getSaveFileName(self, "另存为", filePathName, "文本文档(*.txt)")
- text = self.ui.plainTextEdit.toPlainText()
- if str(aFileName[0]) == "":
- QMessageBox.warning(self, "提示", "没有保存数据,请重新保存。")
- saveFlag = 0
- return aFileName, saveFlag
- else:
- saveFlag = 1
- try:
- with open(aFileName[0], 'w') as f:
- f.write(text)
- except Exception as e:
- QMessageBox.information(self, "提示", str(e), )
- QMessageBox.information(self, "提示", "数据文件保存成功!", QMessageBox.Ok)
- return aFileName, saveFlag
- # 文件保存
- def saveFile(self):
- fileName = self.fileName
- directory = self.directory
- filePath = directory + "/" + fileName
- try:
- with open(filePath, "w",encoding='utf-8') as f:
- text = self.ui.plainTextEdit.toPlainText()
- f.write(text)
- self.ui.plainTextEdit.document().setModified(False)
- QMessageBox.information(self, "Information", "保存成功")
- except Exception as e:
- QMessageBox.warning(self, "Warning", f"Failed to save file: {str(e)}")
- # 物料类别选择
- def materialTypeChanged(self, materialType):
- if not materialType == '无':
- str = "= = = = = = = = = = = = " + materialType + " = = = = = = = = = = = = ="
- self.ui.plainTextEdit.insertPlainText(str +"\n")
- self.ui.plainTextEdit.insertPlainText("\n")
- # 添加物料类别的界面 目前没用
- def openDialog(self):
- dialog = Dialogadd(self)
- dialog.dialogSignel.connect(self.slot_emit)
- dialog.show()
- def closeThread(self):
- self.autoSave.stop()
- def closeEventOld(self, event):
- versionCode = self.ui.versionCode.text()
- deliveryDate = self.ui.Deliverydate.text()
- filenameStr = versionCode + "_" + deliveryDate + ".txt"
- filePath = self.directory
- filePathName = filePath + '/' + filenameStr
- result = QMessageBox.question(self, "注意:", "将文件保存到"+filePathName, QMessageBox.Ok)
- if result == QMessageBox.Ok:
- txt = self.ui.plainTextEdit.toPlainText()
- file = open(filePathName, 'w',encoding="utf-8")
- file.write(txt)
- file.close()
- self.autoSave.terminate()
- self.autoSave.wait()
- if self.autoSave.isFinished():
- del self.autoSave
- event.accept()
- else:
- event.ignore()
- def closeEvent(self, event):
- if self.ui.plainTextEdit.document().isModified():
- fileName = self.fileName
- directory = self.directory
- msg_box = QMessageBox(QMessageBox.Question, "提示", f"是否需要将文件{fileName}保存在{directory}文件夹中")
- msg_box.setStandardButtons(QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel)
- # 将 Save 按钮的文本设置为中文
- save_button = msg_box.button(QMessageBox.Save)
- save_button.setText("保存")
- save_button = msg_box.button(QMessageBox.Discard)
- save_button.setText("不保存")
- save_button = msg_box.button(QMessageBox.Cancel)
- save_button.setText("取消")
- choice = msg_box.exec_()
- if choice == QMessageBox.Save:
- self.saveFile()
- # 如果文件已经保存,则可以关闭窗口
- event.accept()
- elif choice == QMessageBox.Cancel:
- event.ignore()
- else:
- event.accept()
- class AutoSaveThread(QThread):
- # 初始化传参
- def __init__(self, inputDiog,directory,fileName,parent=None):
- super(AutoSaveThread, self).__init__(parent)
- self.inputDiog = inputDiog
- self.versionCode = inputDiog.ui.versionCode.text()
- self.deliveryDate = inputDiog.ui.Deliverydate.text()
- self.directory = directory
- self.fileName = fileName
- def run(self):
- self.loop_monitor()
- @pyqtSlot(str)
- def my_slot(self, value):
- self.fileName = value
- def time_printer(self):
- # 定时
- if self.inputDiog.ui.plainTextEdit.toPlainText():
- #
- filePath = self.directory
- filenameStr = self.fileName
- filePathName = filePath + '/' + filenameStr
- txt = self.inputDiog.ui.plainTextEdit.toPlainText()
- file = open(filePathName, 'w',encoding="utf-8")
- file.write(txt)
- file.close()
- self.loop_monitor()
- else:
- self.loop_monitor()
- def loop_monitor(self):
- time.sleep(60*5)
- self.time_printer()
- if __name__ == '__main__':
- import sys
- app = QApplication(sys.argv)
- ui = ScanInput()
- ui.show()
- sys.exit(app.exec_())
|