ScanInput.py 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. # -*- coding: utf-8 -*-
  2. '''
  3. @Project :Scan
  4. @File :ScanInput.py
  5. @Author :Leslie
  6. @Date :2023/5/6 9:03
  7. '''
  8. import time
  9. from PyQt5.QtCore import QCoreApplication
  10. from PyQt5.QtGui import QIcon
  11. from PyQt5.QtWidgets import QFileDialog, QMessageBox
  12. from pip._vendor import chardet
  13. import Config
  14. from Config import Configuration
  15. from Dialog.Dialogadd import Dialogadd
  16. from ui.Scan import Ui_Form
  17. softwareIconPath = r'./pic/scan.png'
  18. folderName = 'material'
  19. # softwareIconPath = r'./pic/scan.png'
  20. from PyQt5.QtCore import *
  21. from PyQt5.QtGui import *
  22. from PyQt5.QtWidgets import *
  23. class ScanInput(QWidget):
  24. my_signal = pyqtSignal(str)
  25. 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):
  26. super(ScanInput, self).__init__(parent)
  27. self.ui = Ui_Form()
  28. self.ui.setupUi(self)
  29. self.setWindowTitle("物料扫码")
  30. self.setWindowIcon(QIcon(softwareIconPath))
  31. self.directory = directory
  32. self.fileName = fileName
  33. self.ui.versionCode.setText(versionCode)
  34. self.ui.Deliverydate.setText(productDate)
  35. self.QComboBoxnit()
  36. self.ui.save.clicked.connect(self.saveFile)
  37. self.ui.open.clicked.connect(self.actOpenTriggered)
  38. self.ui.materialType.currentTextChanged.connect(self.materialTypeChanged)
  39. QMessageBox.information(self, '提示', '请在英文输入法状态下进行扫码操作')
  40. # 线程传参
  41. self.autoSave = AutoSaveThread(self,directory,self.fileName)
  42. self.autoSave.start()
  43. self.my_signal.connect(self.autoSave.my_slot)
  44. def send_value(self, value):
  45. self.my_signal.emit(value)
  46. # 下拉框属性
  47. def getParamDict(self):
  48. paramDict = Config.Configuration().getConfiguration()
  49. return paramDict
  50. # 下拉框初始化
  51. def QComboBoxnit(self):
  52. paramDict = self.getParamDict()
  53. for item in paramDict:
  54. item = str(item)
  55. self.ui.materialType.addItem(item)
  56. # 打开文件
  57. def actOpenTriggered(self):
  58. versionCode = self.ui.versionCode.text()
  59. deliveryDate = self.ui.Deliverydate.text()
  60. selectPath = self.directory
  61. QMessageBox.information(self, '提示', f'请选择以版本代码\'{versionCode}\'+发料日期\'{deliveryDate}\'为开头的.txt文件')
  62. QFileName = QFileDialog.getOpenFileName(self, "选取文件", selectPath,
  63. "文本文件(*.txt)")
  64. if QFileName[0]:
  65. fileName = QFileName[0].split("/")[-1]
  66. fileNameAll = QFileName[0].split("/")[-1].split(".")[0]
  67. self.fileName = fileName
  68. self.send_value(fileName)
  69. fileNameBegin = versionCode + "_"+deliveryDate
  70. if fileNameAll.startswith(fileNameBegin):
  71. with open(QFileName[0], "rb") as f:
  72. data = f.read()
  73. result = chardet.detect(data)
  74. encoding = result["encoding"]
  75. if encoding is not None:
  76. data = data.decode(encoding)
  77. self.ui.plainTextEdit.setPlainText(data)
  78. else:
  79. QMessageBox.critical(self,'错误',f'请选择以版本代码\'{versionCode}\'+发料日期\'{deliveryDate}\'为开头的.txt文件')
  80. def actSaveAsTriggered(self):
  81. desktopPath = Configuration().get_desktop()
  82. versionCode = self.ui.versionCode.text()
  83. Deliverydate = self.ui.Deliverydate.text()
  84. filenameStr = versionCode + "_" + Deliverydate + ".txt"
  85. filePathName = desktopPath + '\\' + folderName + '\\' + filenameStr
  86. aFileName = QFileDialog.getSaveFileName(self, "另存为", filePathName, "文本文档(*.txt)")
  87. text = self.ui.plainTextEdit.toPlainText()
  88. if str(aFileName[0]) == "":
  89. QMessageBox.warning(self, "提示", "没有保存数据,请重新保存。")
  90. saveFlag = 0
  91. return aFileName, saveFlag
  92. else:
  93. saveFlag = 1
  94. try:
  95. with open(aFileName[0], 'w') as f:
  96. f.write(text)
  97. except Exception as e:
  98. QMessageBox.information(self, "提示", str(e), )
  99. QMessageBox.information(self, "提示", "数据文件保存成功!", QMessageBox.Ok)
  100. return aFileName, saveFlag
  101. # 文件保存
  102. def saveFile(self):
  103. fileName = self.fileName
  104. directory = self.directory
  105. filePath = directory + "/" + fileName
  106. try:
  107. with open(filePath, "w",encoding='utf-8') as f:
  108. text = self.ui.plainTextEdit.toPlainText()
  109. f.write(text)
  110. self.ui.plainTextEdit.document().setModified(False)
  111. QMessageBox.information(self, "Information", "保存成功")
  112. except Exception as e:
  113. QMessageBox.warning(self, "Warning", f"Failed to save file: {str(e)}")
  114. # 物料类别选择
  115. def materialTypeChanged(self, materialType):
  116. if not materialType == '无':
  117. str = "= = = = = = = = = = = = " + materialType + " = = = = = = = = = = = = ="
  118. self.ui.plainTextEdit.insertPlainText(str +"\n")
  119. self.ui.plainTextEdit.insertPlainText("\n")
  120. # 添加物料类别的界面 目前没用
  121. def openDialog(self):
  122. dialog = Dialogadd(self)
  123. dialog.dialogSignel.connect(self.slot_emit)
  124. dialog.show()
  125. def closeThread(self):
  126. self.autoSave.stop()
  127. def closeEventOld(self, event):
  128. versionCode = self.ui.versionCode.text()
  129. deliveryDate = self.ui.Deliverydate.text()
  130. filenameStr = versionCode + "_" + deliveryDate + ".txt"
  131. filePath = self.directory
  132. filePathName = filePath + '/' + filenameStr
  133. result = QMessageBox.question(self, "注意:", "将文件保存到"+filePathName, QMessageBox.Ok)
  134. if result == QMessageBox.Ok:
  135. txt = self.ui.plainTextEdit.toPlainText()
  136. file = open(filePathName, 'w',encoding="utf-8")
  137. file.write(txt)
  138. file.close()
  139. self.autoSave.terminate()
  140. self.autoSave.wait()
  141. if self.autoSave.isFinished():
  142. del self.autoSave
  143. event.accept()
  144. else:
  145. event.ignore()
  146. def closeEvent(self, event):
  147. if self.ui.plainTextEdit.document().isModified():
  148. fileName = self.fileName
  149. directory = self.directory
  150. msg_box = QMessageBox(QMessageBox.Question, "提示", f"是否需要将文件{fileName}保存在{directory}文件夹中")
  151. msg_box.setStandardButtons(QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel)
  152. # 将 Save 按钮的文本设置为中文
  153. save_button = msg_box.button(QMessageBox.Save)
  154. save_button.setText("保存")
  155. save_button = msg_box.button(QMessageBox.Discard)
  156. save_button.setText("不保存")
  157. save_button = msg_box.button(QMessageBox.Cancel)
  158. save_button.setText("取消")
  159. choice = msg_box.exec_()
  160. if choice == QMessageBox.Save:
  161. self.saveFile()
  162. # 如果文件已经保存,则可以关闭窗口
  163. event.accept()
  164. elif choice == QMessageBox.Cancel:
  165. event.ignore()
  166. else:
  167. event.accept()
  168. class AutoSaveThread(QThread):
  169. # 初始化传参
  170. def __init__(self, inputDiog,directory,fileName,parent=None):
  171. super(AutoSaveThread, self).__init__(parent)
  172. self.inputDiog = inputDiog
  173. self.versionCode = inputDiog.ui.versionCode.text()
  174. self.deliveryDate = inputDiog.ui.Deliverydate.text()
  175. self.directory = directory
  176. self.fileName = fileName
  177. def run(self):
  178. self.loop_monitor()
  179. @pyqtSlot(str)
  180. def my_slot(self, value):
  181. self.fileName = value
  182. def time_printer(self):
  183. # 定时
  184. if self.inputDiog.ui.plainTextEdit.toPlainText():
  185. #
  186. filePath = self.directory
  187. filenameStr = self.fileName
  188. filePathName = filePath + '/' + filenameStr
  189. txt = self.inputDiog.ui.plainTextEdit.toPlainText()
  190. file = open(filePathName, 'w',encoding="utf-8")
  191. file.write(txt)
  192. file.close()
  193. self.loop_monitor()
  194. else:
  195. self.loop_monitor()
  196. def loop_monitor(self):
  197. time.sleep(60*5)
  198. self.time_printer()
  199. if __name__ == '__main__':
  200. import sys
  201. app = QApplication(sys.argv)
  202. ui = ScanInput()
  203. ui.show()
  204. sys.exit(app.exec_())