# -*- 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_())