ScanInput.py 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  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. import Config
  13. from Config import Configuration
  14. from Dialog.Dialogadd import Dialogadd
  15. from ui.Scan import Ui_Form
  16. softwareIconPath = r'./pic/scan.png'
  17. folderName = 'material'
  18. # softwareIconPath = r'./pic/scan.png'
  19. from PyQt5.QtCore import *
  20. from PyQt5.QtGui import *
  21. from PyQt5.QtWidgets import *
  22. # class WorkThread(QThread):
  23. # sinOut = pyqtSignal(str)
  24. # def run(self):
  25. # while True:
  26. # time.sleep(5)
  27. # self.sinOut.emit("1111run")
  28. class ScanInput(QWidget):
  29. def __init__(self, versionCode='sss',productDate="aaaa",directory="C:/Users/lili/Desktop/material",parent=None, closeToDlg=None):
  30. super(ScanInput, self).__init__(parent)
  31. self.ui = Ui_Form()
  32. self.ui.setupUi(self)
  33. self.setWindowTitle("物料扫码")
  34. self.setWindowIcon(QIcon(softwareIconPath))
  35. self.directory = directory
  36. self.ui.versionCode.setText(versionCode)
  37. self.ui.Deliverydate.setText(productDate)
  38. self.QComboBoxnit()
  39. # self.ui.save.clicked.connect(self.actSaveTriggered)
  40. self.ui.open.clicked.connect(self.actOpenTriggered)
  41. self.ui.materialType.currentTextChanged.connect(self.materialTypeChanged)
  42. QMessageBox.information(self, '提示', '请在英文输入法状态下进行扫码操作')
  43. # 创建保存.txt的文件夹
  44. # self.mkdirFile()
  45. # 线程传参
  46. self.autoSave = AutoSaveThread(self,directory)
  47. self.autoSave.start()
  48. # 下拉框属性
  49. def getParamDict(self):
  50. paramDict = Config.Configuration().getConfiguration()
  51. return paramDict
  52. # 下拉框初始化
  53. def QComboBoxnit(self):
  54. paramDict = self.getParamDict()
  55. for item in paramDict:
  56. item = str(item)
  57. self.ui.materialType.addItem(item)
  58. # 打开文件
  59. def actOpenTriggered(self):
  60. curPath = QCoreApplication.applicationDirPath()
  61. QMessageBox.information(self, '提示', '请选择以版本代码+发料日期为名的.txt文件')
  62. # 调用打开文件对话框打开一个文件
  63. QFileName = QFileDialog.getOpenFileName(self, "选取文件", curPath,
  64. "文本文件(*.txt)")
  65. if QFileName[0]:
  66. fileName = QFileName[0].split("/")[-1].split(".")[0].split("_")
  67. if len(fileName)==2:
  68. versionCode = fileName[0]
  69. deliveryDate = fileName[1]
  70. self.ui.Deliverydate.setText(deliveryDate)
  71. self.ui.versionCode.setText(versionCode)
  72. f = open(QFileName[0], 'r',encoding='utf-8')
  73. with f:
  74. data = f.read()
  75. self.ui.plainTextEdit.setPlainText(data)
  76. else:
  77. QMessageBox.critical(self,'错误','请选择以版本代码+发料日期为名的.txt文件')
  78. # 文件另存为
  79. def actSaveTriggered(self):
  80. desktopPath = Configuration().get_desktop()
  81. versionCode = self.ui.versionCode.text()
  82. Deliverydate = self.ui.Deliverydate.text()
  83. filenameStr = versionCode + "_" + Deliverydate + ".txt"
  84. filePathName = desktopPath + '\\' + folderName + '\\' + filenameStr
  85. aFileName = QFileDialog.getSaveFileName(self, "另存为", filePathName, "文本文档(*.txt)")
  86. text = self.ui.plainTextEdit.toPlainText()
  87. if str(aFileName[0]) == "":
  88. QMessageBox.warning(self, "提示", "没有保存数据,请重新保存。")
  89. saveFlag = 0
  90. return aFileName, saveFlag
  91. else:
  92. saveFlag = 1
  93. try:
  94. with open(aFileName[0], 'w') as f:
  95. f.write(text)
  96. except Exception as e:
  97. QMessageBox.information(self, "提示", str(e), )
  98. QMessageBox.information(self, "提示", "数据文件保存成功!", QMessageBox.Ok)
  99. return aFileName, saveFlag
  100. # 物料类别选择
  101. def materialTypeChanged(self, materialType):
  102. if not materialType == '无':
  103. str = "= = = = = = = = = = = = " + materialType + " = = = = = = = = = = = = ="
  104. self.ui.plainTextEdit.insertPlainText(str +"\n")
  105. self.ui.plainTextEdit.insertPlainText("\n")
  106. # 创建保存文件的文件夹
  107. # def mkdirFile(self):
  108. #
  109. # desktopPath = Configuration().get_desktop()
  110. #
  111. # folderNamePath = desktopPath + '\\' + folderName
  112. #
  113. # if not os.path.exists(folderNamePath):
  114. # os.mkdir(folderNamePath)
  115. # else:
  116. # return True
  117. # 添加物料类别的界面 目前没用
  118. def openDialog(self):
  119. dialog = Dialogadd(self)
  120. # 连接【子窗口内置消息和主窗口的槽函数】
  121. # dialog.datetime.dateChanged.connect(self.slot_inner)
  122. # 连接【子窗口自定义消息和主窗口槽函数】
  123. dialog.dialogSignel.connect(self.slot_emit)
  124. dialog.show()
  125. def closeThread(self):
  126. self.autoSave.stop()
  127. def closeEvent(self, event):
  128. # # desktopPath = Configuration().get_desktop()
  129. #
  130. versionCode = self.ui.versionCode.text()
  131. deliveryDate = self.ui.Deliverydate.text()
  132. filenameStr = versionCode + "_" + deliveryDate + ".txt"
  133. filePath = self.directory
  134. filePathName = filePath + '/' + filenameStr
  135. result = QMessageBox.question(self, "注意:", "将文件保存到"+filePathName, QMessageBox.Ok)
  136. if result == QMessageBox.Ok:
  137. txt = self.ui.plainTextEdit.toPlainText()
  138. file = open(filePathName, 'w',encoding="utf-8")
  139. file.write(txt)
  140. file.close()
  141. #关闭线程
  142. self.autoSave.terminate() # 结束此进程
  143. self.autoSave.wait() # 等待结束完成
  144. if self.autoSave.isFinished(): # 如果当前线程已经完成工作,则删除
  145. del self.autoSave
  146. event.accept()
  147. else:
  148. event.ignore()
  149. # QMessageBox.information(self, "消息", "谢谢!")
  150. # 自动保存 线程任务
  151. class AutoSaveThread(QThread):
  152. # 初始化传参
  153. def __init__(self, inputDiog,directory,parent=None):
  154. super(AutoSaveThread, self).__init__(parent)
  155. self.inputDiog = inputDiog
  156. self.versionCode = inputDiog.ui.versionCode.text()
  157. self.deliveryDate = inputDiog.ui.Deliverydate.text()
  158. self.directory = directory
  159. def run(self):
  160. self.loop_monitor()
  161. def time_printer(self):
  162. # 定时
  163. if self.inputDiog.ui.plainTextEdit.toPlainText():
  164. # desktopPath = Configuration().get_desktop()
  165. versionCode = self.versionCode
  166. deliveryDate = self.deliveryDate
  167. filePath = self.directory
  168. filenameStr = versionCode+"_"+deliveryDate + ".txt"
  169. # filePathName = filePath + '\\' + folderName + '\\' + filenameStr
  170. filePathName = filePath + '/' + filenameStr
  171. txt = self.inputDiog.ui.plainTextEdit.toPlainText()
  172. file = open(filePathName, 'w',encoding="utf-8")
  173. file.write(txt)
  174. file.close()
  175. self.loop_monitor()
  176. else:
  177. self.loop_monitor()
  178. def loop_monitor(self):
  179. time.sleep(60*5)
  180. self.time_printer()
  181. if __name__ == '__main__':
  182. import sys
  183. app = QApplication(sys.argv)
  184. ui = ScanInput()
  185. ui.show()
  186. sys.exit(app.exec_())