main_window_XmSgj.py 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. import sys
  2. import threading
  3. import time
  4. from PyQt5 import QtWidgets
  5. sys.path.append("..")
  6. import mytool.db_helper.db_operation as spmng
  7. from PyQt5.QtCore import QSize, QTimer, Qt
  8. from PyQt5.QtGui import QFont, QBrush, QColor, QPixmap
  9. from PyQt5.QtWidgets import QApplication, QMainWindow, QListWidgetItem, QListWidget, QLabel, QMessageBox, QFrame, \
  10. QAbstractItemView
  11. from ui.ui import Ui_MainWindow
  12. class MainWindow(QMainWindow, Ui_MainWindow):
  13. def __init__(self, task_type, show_config, db_config):
  14. super().__init__()
  15. self.setupUi(self)
  16. # self.label.setText("上古街智能立体停车库取车排队信息")
  17. self.setWindowFlags(Qt.FramelessWindowHint)
  18. self.task_type = task_type
  19. self.top_number = show_config["top_number"]
  20. # self.image_label.setPixmap(QPixmap('./image/log.jpg'))
  21. # self.image_label.setScaledContents(True)
  22. # self.image_label.setMaximumHeight(140)
  23. # self.image_label.setMaximumWidth(600)
  24. self.db = spmng.DBOperation(db_config['db_ip'], db_config['db_port'], db_config['db_name'],
  25. db_config['db_user'], db_config['db_password'])
  26. self.unit_list = show_config["unit_list"][show_config["unit"]]
  27. self.font_size = show_config["font_size"]
  28. self.list_widget_dict = {}
  29. self.list_widget_thread = {}
  30. self.scroll_flag_dict = {}
  31. self.command_dict = {}
  32. self.last_command_dict = {}
  33. self.btn_positions = [(i, j) for i in range(0, show_config['row']) for j in range(show_config['column'])]
  34. # 创建listwidget与label 配置多少个单元生成多少对
  35. for i, position in zip(self.unit_list, self.btn_positions):
  36. vboxlayout = QtWidgets.QVBoxLayout()
  37. self.list_widget_dict[i] = QListWidget(self)
  38. self.list_widget_dict[i].setAutoScroll(True)
  39. self.scroll_flag_dict[i] = False
  40. self.list_widget_dict[i].setSelectionMode(QAbstractItemView.NoSelection)
  41. self.list_widget_dict[i].setStyleSheet("border:5px solid #c0181f;")
  42. self.list_widget_dict[i].setObjectName(('list_widget_%d' % (i + 1)))
  43. self.list_widget_thread[i] = threading.Thread(target=self.Scroll,args=(i,))
  44. self.list_widget_thread[i].start()
  45. label = QLabel(self.get_unit(i), self)
  46. label.setFont(QFont("黑体", 30, QFont.Bold)) # 设置字体、样式和大小
  47. label.setAlignment(Qt.AlignCenter)
  48. vboxlayout.addWidget(label)
  49. vboxlayout.addWidget(self.list_widget_dict[i])
  50. vboxlayout.setSpacing(0)
  51. # hframe = QFrame(self)
  52. # hframe.setFrameShape(QFrame.HLine) # 设置水平方向
  53. # hframe.setStyleSheet("QFrame{background:black;min-height:4px}");
  54. # vboxlayout.addWidget(hframe)
  55. self.main_gridLayout.addLayout(vboxlayout, *position)
  56. self.main_gridLayout.setVerticalSpacing(40)
  57. self.command_dict[i] = []
  58. # 界面刷新定时器
  59. self.timer = QTimer()
  60. self.timer.timeout.connect(self.Switch)
  61. self.timer.start(200)
  62. # 数据库查询线程
  63. self.db_query = threading.Thread(target=self.db_query)
  64. self.db_query_isClose = False
  65. self.db_query.start()
  66. # 断开连接的弹窗
  67. self.t_timer = QTimer(self)
  68. self.msg_box_hint = QMessageBox()
  69. self.msg_box_hint.setIcon(QMessageBox.Critical)
  70. self.msg_box_hint.setWindowTitle('错误')
  71. self.msg_box_hint.setText('连接断开,重新连接中...')
  72. self.t_timer.setSingleShot(True)
  73. self.t_timer.timeout.connect(self.msg_box_hint.close)
  74. def closeEvent(self, event):
  75. self.db_query_isClose = True
  76. self.db_query.join()
  77. event.accept() # 接受关闭事件
  78. # 定义自动关闭对话框函数
  79. def show_message_box(self):
  80. self.msg_box_hint.show()
  81. self.t_timer.start(1000)
  82. def db_query(self):
  83. while self.db_query_isClose is False:
  84. for i in self.unit_list:
  85. if self.task_type != 0 and i != 40:
  86. self.last_command_dict[i] = self.db.query_command_all_in_unit_type_and_sort(i, self.task_type)
  87. elif self.task_type != 0 and i == 40:
  88. self.last_command_dict[i] = self.db.query_command_top_number_in_type(self.task_type,self.top_number)
  89. elif self.task_type == 0 and i != 40:
  90. self.last_command_dict[i] = self.db.query_command_all_in_unit_and_sort(i)
  91. else:
  92. self.last_command_dict[i] = self.db.query_command_top_number(self.top_number)
  93. time.sleep(0.2)
  94. def get_listWidget_item(self, dict):
  95. item = QListWidgetItem()
  96. item.setFont(QFont('微软雅黑', self.font_size, QFont.Bold))
  97. show_str = ""
  98. if dict['type'] == 1: # 存车指令
  99. item.setBackground(QColor(185, 240, 240))
  100. if (dict['statu'] == 0): # 排队
  101. item.setForeground(QColor(80, 80, 80))
  102. show_str = "%s 排队中" % (dict['car_number'])
  103. elif (dict['statu'] == 1): # 工作
  104. item.setForeground(QColor('blue'))
  105. show_str = "%s 存车中" % (dict['car_number'])
  106. elif (dict['statu'] == 2): # 已完成
  107. item.setForeground(QColor('green'))
  108. show_str = "%s 已完成" % (dict['car_number'])
  109. elif (dict['statu'] == 3): # 已完成
  110. item.setForeground(QColor('red'))
  111. show_str = "%s 维护!" % (dict['car_number'])
  112. elif dict['type'] == 2: # 取车指令
  113. item.setBackground(QColor(250, 240, 200))
  114. if (dict['statu'] == 0): # 排队
  115. item.setForeground(QColor(80, 80, 80))
  116. show_str = "%s 排队中" % (dict['car_number'])
  117. elif (dict['statu'] == 1): # 工作
  118. item.setForeground(QColor('blue'))
  119. show_str = "%s 取车中" % (dict['car_number'])
  120. elif (dict['statu'] == 2): # 已完成
  121. item.setForeground(QColor('green'))
  122. show_str = "%s 出口%d" % (dict['car_number'],dict['export_id'])
  123. elif (dict['statu'] == 3): # 已完成
  124. item.setForeground(QColor(80, 180, 200))
  125. show_str = "%s 维护!" % (dict['car_number'])
  126. show_str = show_str[:len(show_str)-3]+self.get_unit(dict['unit'])+show_str[len(show_str)-3:]
  127. item.setText(show_str)
  128. return item
  129. def Switch(self):
  130. for i in self.unit_list:
  131. if (i in self.last_command_dict.keys()) is False or self.last_command_dict[i] is None:
  132. self.show_message_box()
  133. elif self.command_dict[i] != self.last_command_dict[i]:
  134. self.command_dict[i] = self.last_command_dict[i]
  135. self.list_widget_dict[i].clear()
  136. for dict in self.command_dict[i]:
  137. if dict['statu'] != 4:
  138. self.list_widget_dict[i].addItem(self.get_listWidget_item(dict))
  139. def Scroll(self,i):
  140. while True:
  141. for index in range(self.list_widget_dict[i].count()):
  142. # if self.scroll_flag_dict[i] is True:
  143. # self.scroll_flag_dict[i] = False
  144. # break
  145. self.list_widget_dict[i].setCurrentRow(index)
  146. time.sleep(0.7)
  147. time.sleep(2)
  148. def get_unit(self, unit):
  149. if unit == 1:
  150. return 'A'
  151. elif unit == 2:
  152. return 'B'
  153. elif unit == 11:
  154. return 'A1'
  155. elif unit == 12:
  156. return 'A2'
  157. elif unit == 13:
  158. return 'A3'
  159. elif unit == 14:
  160. return 'A4'
  161. elif unit == 21:
  162. return 'B1'
  163. elif unit == 22:
  164. return 'B2'
  165. elif unit == 23:
  166. return 'B3'
  167. elif unit == 24:
  168. return 'B4'
  169. elif unit == 25:
  170. return 'B5'
  171. elif unit == 31:
  172. return 'C1'
  173. elif unit == 32:
  174. return 'C2'
  175. elif unit == 40:
  176. return '最新%d条' % self.top_number
  177. return '未知'