ScanInput.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371
  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 WorkThread(QThread):
  24. # sinOut = pyqtSignal(str)
  25. # def run(self):
  26. # while True:
  27. # time.sleep(5)
  28. # self.sinOut.emit("1111run")
  29. class ScanInput(QWidget):
  30. my_signal = pyqtSignal(str)
  31. 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):
  32. super(ScanInput, self).__init__(parent)
  33. self.ui = Ui_Form()
  34. self.ui.setupUi(self)
  35. self.setWindowTitle("物料扫码")
  36. self.setWindowIcon(QIcon(softwareIconPath))
  37. self.directory = directory
  38. self.fileName = fileName
  39. self.ui.versionCode.setText(versionCode)
  40. self.ui.Deliverydate.setText(productDate)
  41. self.QComboBoxnit()
  42. self.ui.save.clicked.connect(self.saveFile)
  43. self.ui.open.clicked.connect(self.actOpenTriggered)
  44. self.ui.materialType.currentTextChanged.connect(self.materialTypeChanged)
  45. QMessageBox.information(self, '提示', '请在英文输入法状态下进行扫码操作')
  46. # 创建保存.txt的文件夹
  47. # self.mkdirFile()
  48. # 线程传参
  49. self.autoSave = AutoSaveThread(self,directory,self.fileName)
  50. self.autoSave.start()
  51. self.my_signal.connect(self.autoSave.my_slot)
  52. def send_value(self, value):
  53. self.my_signal.emit(value)
  54. # 下拉框属性
  55. def getParamDict(self):
  56. paramDict = Config.Configuration().getConfiguration()
  57. return paramDict
  58. # 下拉框初始化
  59. def QComboBoxnit(self):
  60. paramDict = self.getParamDict()
  61. for item in paramDict:
  62. item = str(item)
  63. self.ui.materialType.addItem(item)
  64. # 打开文件
  65. def actOpenTriggered(self):
  66. # 538614100080B2AE_2023年5月22日
  67. # 当前应用所在的目录
  68. # curPath = QCoreApplication.applicationDirPath()
  69. versionCode = self.ui.versionCode.text()
  70. deliveryDate = self.ui.Deliverydate.text()
  71. selectPath = self.directory
  72. QMessageBox.information(self, '提示', f'请选择以版本代码\'{versionCode}\'+发料日期\'{deliveryDate}\'为开头的.txt文件')
  73. # 调用打开文件对话框打开一个文件
  74. QFileName = QFileDialog.getOpenFileName(self, "选取文件", selectPath,
  75. "文本文件(*.txt)")
  76. if QFileName[0]:
  77. fileName = QFileName[0].split("/")[-1]
  78. fileNameAll = QFileName[0].split("/")[-1].split(".")[0]
  79. self.fileName = fileName
  80. # 将文件名传递给
  81. self.send_value(fileName)
  82. fileNameBegin = versionCode + "_"+deliveryDate
  83. if fileNameAll.startswith(fileNameBegin):
  84. with open(QFileName[0], "rb") as f:
  85. data = f.read()
  86. result = chardet.detect(data)
  87. encoding = result["encoding"]
  88. if encoding is not None:
  89. data = data.decode(encoding)
  90. self.ui.plainTextEdit.setPlainText(data)
  91. # f = open(QFileName[0], 'r',encoding='utf-8')
  92. # with f:
  93. # data = f.read()
  94. # result = chardet.detect(data)
  95. # self.ui.plainTextEdit.setPlainText(data)
  96. else:
  97. QMessageBox.critical(self,'错误',f'请选择以版本代码\'{versionCode}\'+发料日期\'{deliveryDate}\'为开头的.txt文件')
  98. # 文件另存为
  99. def actSaveAsTriggered(self):
  100. desktopPath = Configuration().get_desktop()
  101. versionCode = self.ui.versionCode.text()
  102. Deliverydate = self.ui.Deliverydate.text()
  103. filenameStr = versionCode + "_" + Deliverydate + ".txt"
  104. filePathName = desktopPath + '\\' + folderName + '\\' + filenameStr
  105. aFileName = QFileDialog.getSaveFileName(self, "另存为", filePathName, "文本文档(*.txt)")
  106. text = self.ui.plainTextEdit.toPlainText()
  107. if str(aFileName[0]) == "":
  108. QMessageBox.warning(self, "提示", "没有保存数据,请重新保存。")
  109. saveFlag = 0
  110. return aFileName, saveFlag
  111. else:
  112. saveFlag = 1
  113. try:
  114. with open(aFileName[0], 'w') as f:
  115. f.write(text)
  116. except Exception as e:
  117. QMessageBox.information(self, "提示", str(e), )
  118. QMessageBox.information(self, "提示", "数据文件保存成功!", QMessageBox.Ok)
  119. return aFileName, saveFlag
  120. # 文件保存
  121. def saveFile(self):
  122. fileName = self.fileName
  123. directory = self.directory
  124. filePath = directory + "/" + fileName
  125. # filePath = "test.txt" # 指定文件路径
  126. try:
  127. with open(filePath, "w",encoding='utf-8') as f:
  128. # with open(filePath, "w") as f:
  129. text = self.ui.plainTextEdit.toPlainText()
  130. f.write(text)
  131. # 将文件标记为已保存
  132. self.ui.plainTextEdit.document().setModified(False)
  133. QMessageBox.information(self, "Information", "保存成功")
  134. except Exception as e:
  135. QMessageBox.warning(self, "Warning", f"Failed to save file: {str(e)}")
  136. # 物料类别选择
  137. def materialTypeChanged(self, materialType):
  138. if not materialType == '无':
  139. str = "= = = = = = = = = = = = " + materialType + " = = = = = = = = = = = = ="
  140. self.ui.plainTextEdit.insertPlainText(str +"\n")
  141. self.ui.plainTextEdit.insertPlainText("\n")
  142. # 创建保存文件的文件夹
  143. # def mkdirFile(self):
  144. #
  145. # desktopPath = Configuration().get_desktop()
  146. #
  147. # folderNamePath = desktopPath + '\\' + folderName
  148. #
  149. # if not os.path.exists(folderNamePath):
  150. # os.mkdir(folderNamePath)
  151. # else:
  152. # return True
  153. # 添加物料类别的界面 目前没用
  154. def openDialog(self):
  155. dialog = Dialogadd(self)
  156. # 连接【子窗口内置消息和主窗口的槽函数】
  157. # dialog.datetime.dateChanged.connect(self.slot_inner)
  158. # 连接【子窗口自定义消息和主窗口槽函数】
  159. dialog.dialogSignel.connect(self.slot_emit)
  160. dialog.show()
  161. def closeThread(self):
  162. self.autoSave.stop()
  163. def closeEventOld(self, event):
  164. # # desktopPath = Configuration().get_desktop()
  165. #
  166. versionCode = self.ui.versionCode.text()
  167. deliveryDate = self.ui.Deliverydate.text()
  168. filenameStr = versionCode + "_" + deliveryDate + ".txt"
  169. filePath = self.directory
  170. filePathName = filePath + '/' + filenameStr
  171. result = QMessageBox.question(self, "注意:", "将文件保存到"+filePathName, QMessageBox.Ok)
  172. if result == QMessageBox.Ok:
  173. txt = self.ui.plainTextEdit.toPlainText()
  174. file = open(filePathName, 'w',encoding="utf-8")
  175. file.write(txt)
  176. file.close()
  177. #关闭线程
  178. self.autoSave.terminate() # 结束此进程
  179. self.autoSave.wait() # 等待结束完成
  180. if self.autoSave.isFinished(): # 如果当前线程已经完成工作,则删除
  181. del self.autoSave
  182. event.accept()
  183. else:
  184. event.ignore()
  185. # QMessageBox.information(self, "消息", "谢谢!")
  186. def closeEvent(self, event):
  187. # 判断文本编辑器是否已经保存
  188. if self.ui.plainTextEdit.document().isModified():
  189. # 文件名称
  190. fileName = self.fileName
  191. directory = self.directory
  192. msg_box = QMessageBox(QMessageBox.Question, "提示", f"是否需要将文件{fileName}保存在{directory}文件夹中")
  193. msg_box.setStandardButtons(QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel)
  194. # 将 Save 按钮的文本设置为中文
  195. save_button = msg_box.button(QMessageBox.Save)
  196. save_button.setText("保存")
  197. save_button = msg_box.button(QMessageBox.Discard)
  198. save_button.setText("不保存")
  199. save_button = msg_box.button(QMessageBox.Cancel)
  200. save_button.setText("取消")
  201. choice = msg_box.exec_()
  202. if choice == QMessageBox.Save:
  203. self.saveFile()
  204. # 如果文件已经保存,则可以关闭窗口
  205. event.accept()
  206. elif choice == QMessageBox.Cancel:
  207. event.ignore()
  208. else:
  209. event.accept()
  210. # 自动保存 线程任务
  211. class AutoSaveThread(QThread):
  212. # 初始化传参
  213. def __init__(self, inputDiog,directory,fileName,parent=None):
  214. super(AutoSaveThread, self).__init__(parent)
  215. self.inputDiog = inputDiog
  216. self.versionCode = inputDiog.ui.versionCode.text()
  217. self.deliveryDate = inputDiog.ui.Deliverydate.text()
  218. self.directory = directory
  219. self.fileName = fileName
  220. def run(self):
  221. self.loop_monitor()
  222. @pyqtSlot(str)
  223. def my_slot(self, value):
  224. self.fileName = value
  225. def time_printer(self):
  226. # 定时
  227. if self.inputDiog.ui.plainTextEdit.toPlainText():
  228. # desktopPath = Configuration().get_desktop()
  229. # versionCode = self.versionCode
  230. # deliveryDate = self.deliveryDate
  231. #
  232. filePath = self.directory
  233. filenameStr = self.fileName
  234. #
  235. # filenameStr = versionCode+"_"+deliveryDate + ".txt"
  236. # filePathName = filePath + '\\' + folderName + '\\' + filenameStr
  237. filePathName = filePath + '/' + filenameStr
  238. txt = self.inputDiog.ui.plainTextEdit.toPlainText()
  239. file = open(filePathName, 'w',encoding="utf-8")
  240. file.write(txt)
  241. file.close()
  242. self.loop_monitor()
  243. else:
  244. self.loop_monitor()
  245. def loop_monitor(self):
  246. time.sleep(60*5)
  247. self.time_printer()
  248. if __name__ == '__main__':
  249. import sys
  250. app = QApplication(sys.argv)
  251. ui = ScanInput()
  252. ui.show()
  253. sys.exit(app.exec_())