Advertisement
Guest User

Untitled

a guest
Jun 26th, 2019
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.81 KB | None | 0 0
  1. ACTIVATED_CSS = 'QTextEdit {image: url(einstein.jpg);}'
  2.  
  3. import sys
  4. import threading
  5. import asyncio
  6. import time
  7. from PyQt5.QtWidgets import *
  8. from PyQt5.QtGui import *
  9. from PyQt5.QtCore import *
  10. from TcpClient import TcpClient
  11. from play_wav_files import PlaySoundThread
  12.  
  13.  
  14. NORMAL_HIDDEN_CSS = 'QTextEdit {background-color: black; font: 30px; color: white;}'
  15. ACTIVATED_CSS = 'QTextEdit {color: red; font: 25px; background-color: green; font-weight: bold; margin-top: 10px; margin-bottom: 20px; margin-left: 30px; margin-right: 30px;}'
  16. NORMAL_CSS = 'QTextEdit {color: white; font: 25px; background-color: grey; font-weight: bold; margin-top: 10px; margin-bottom: 20px; margin-left: 30px; margin-right: 30px;}'
  17. ACTIVATED_CSS_AR = 'QTextEdit {color: red; font: 25px; background-color: green; font-weight: bold; margin-top: 20px; margin-bottom: 40px; margin-left: 50px; margin-right: 50px;}'
  18. NORMAL_CSS_AR = 'QTextEdit {color: white; font: 25px; background-color: grey; font-weight: bold; margin-top: 20px; margin-bottom: 40px; margin-left: 50px; margin-right: 50px;}'
  19. TCP_CLIENT = TcpClient()
  20. EW_CONSTANT = TCP_CLIENT.nepoch * TCP_CLIENT.nwords
  21. ASYNC_LOOP = asyncio.get_event_loop()
  22.  
  23. #TENTAR COM IMAGENS CARAS ------------------
  24.  
  25. #ACTIVATED_CSS = 'QTextEdit {image: url(einstein.jpg);}'
  26. #ACTIVATED_CSS_AR = 'QTextEdit {image: url(einstein.jpg);}'
  27.  
  28. class QtSideGui(QDialog):
  29.  
  30. def __init__(self):
  31. QDialog.__init__(self)
  32.  
  33. # buttons:
  34. self.conn_button = QPushButton('Recieve server instructions')
  35. self.clear_button = QPushButton('Clear status')
  36. self.insert_code_1 = QPushButton('Insert Code 1')
  37. self.insert_code_update_1 = QPushButton('insert update code 1')
  38. self.insert_code_2 = QPushButton('Insert Code 2')
  39. self.insert_code_update_2 = QPushButton('insert update code 2')
  40. self.insert_code_3 = QPushButton('Insert Code 3')
  41. self.insert_code_update_3 = QPushButton('insert update code 3')
  42. self.insert_code_4 = QPushButton('Insert Code 4')
  43. self.insert_code_update_4 = QPushButton('insert update code 4')
  44. self.insert_code_5 = QPushButton('Insert Code 5')
  45. self.insert_code_update_5 = QPushButton('insert update code 5')
  46. self.insert_code_6 = QPushButton('Insert Code 6')
  47. self.insert_code_update_6 = QPushButton('insert update code 6')
  48. self.insert_code_7 = QPushButton('Insert Code 7')
  49. self.insert_code_update_7 = QPushButton('insert update code 7')
  50. self.insert_code_1.setHidden(True)
  51. self.insert_code_update_1.setHidden(True)
  52. self.insert_code_2.setHidden(True)
  53. self.insert_code_update_2.setHidden(True)
  54. self.insert_code_3.setHidden(True)
  55. self.insert_code_update_3.setHidden(True)
  56. self.insert_code_4.setHidden(True)
  57. self.insert_code_update_4.setHidden(True)
  58. self.insert_code_5.setHidden(True)
  59. self.insert_code_update_5.setHidden(True)
  60. self.insert_code_6.setHidden(True)
  61. self.insert_code_update_6.setHidden(True)
  62. self.insert_code_7.setHidden(True)
  63. self.insert_code_update_7.setHidden(True)
  64. self.clear_button.setHidden(True)
  65.  
  66. # Text Boxes:
  67. self._l_blank1 = QTextEdit('')
  68. self._l_blank1.setStyleSheet(NORMAL_HIDDEN_CSS)
  69. self._l_blank2 = QTextEdit('')
  70. self._l_blank2.setStyleSheet(NORMAL_HIDDEN_CSS)
  71. self._l_blank3 = QTextEdit('')
  72. self._l_blank3.setStyleSheet(NORMAL_HIDDEN_CSS)
  73. self._l_blank4 = QTextEdit('')
  74. self._l_blank4.setStyleSheet(NORMAL_HIDDEN_CSS)
  75. self._l_blank5 = QTextEdit('')
  76. self._l_blank5.setStyleSheet(NORMAL_HIDDEN_CSS)
  77. self._l_blank6 = QTextEdit('')
  78. self._l_blank6.setStyleSheet(NORMAL_HIDDEN_CSS)
  79. self._updadeQText = QTextEdit('-')
  80. self._updadeQText.setStyleSheet(NORMAL_HIDDEN_CSS)
  81.  
  82. self._l_sim = QTextEdit()
  83. self._l_sim.setText(' SIM')
  84. self._l_sim.setAlignment(Qt.AlignCenter)
  85. self._l_sim.setStyleSheet(NORMAL_CSS)
  86.  
  87. self._l_nao = QTextEdit()
  88. self._l_nao.setText(' NÃO')
  89. self._l_nao.setAlignment(Qt.AlignCenter)
  90. self._l_nao.setStyleSheet(NORMAL_CSS)
  91.  
  92. self._l_fome = QTextEdit()
  93. self._l_fome.setText(' FOME')
  94. self._l_fome.setAlignment(Qt.AlignCenter)
  95. self._l_fome.setStyleSheet(NORMAL_CSS)
  96.  
  97. self._l_sede = QTextEdit()
  98. self._l_sede.setText(' SEDE')
  99. self._l_sede.setAlignment(Qt.AlignCenter)
  100. self._l_sede.setStyleSheet(NORMAL_CSS)
  101.  
  102. self._l_urinar = QTextEdit()
  103. self._l_urinar.setText(' URINAR')
  104. self._l_urinar.setAlignment(Qt.AlignCenter)
  105. self._l_urinar.setStyleSheet(NORMAL_CSS)
  106.  
  107. self._l_ar = QTextEdit()
  108. self._l_ar.setText(' AR')
  109. self._l_ar.setAlignment(Qt.AlignCenter)
  110. self._l_ar.setStyleSheet(NORMAL_CSS_AR)
  111.  
  112. self._l_posicao = QTextEdit()
  113. self._l_posicao.setText(' POSIÇÃO')
  114. self._l_posicao.setAlignment(Qt.AlignCenter)
  115. self._l_posicao.setStyleSheet(NORMAL_CSS)
  116.  
  117.  
  118. # Layout:
  119. self._layoutGL = QGridLayout()
  120. self._layoutGL.addWidget(self._l_sim, 3, 1)
  121. self._layoutGL.addWidget(self._l_nao, 3, 4)
  122. self._layoutGL.addWidget(self._l_fome, 4, 2)
  123. self._layoutGL.addWidget(self._l_sede, 4, 3)
  124. self._layoutGL.addWidget(self._l_urinar, 2, 1)
  125. self._layoutGL.addWidget(self._l_posicao, 2, 4)
  126. self._layoutGL.addWidget(self._l_blank1, 2, 2)
  127. self._layoutGL.addWidget(self._l_blank2, 2, 3)
  128. self._layoutGL.addWidget(self._l_blank3, 3, 3)
  129. self._layoutGL.addWidget(self._l_blank4, 3, 2)
  130. self._layoutGL.addWidget(self._l_blank5, 4, 1)
  131. self._layoutGL.addWidget(self._l_blank6, 4, 4)
  132.  
  133. self._layoutH = QHBoxLayout()
  134. self._layoutH.addWidget(self._l_blank2,35.5)
  135. self._layoutH.addWidget(self._l_ar,29)
  136. self._layoutH.addWidget(self._l_blank3,35.5)
  137. self._layoutV = QVBoxLayout()
  138. self._layoutV.addWidget(self._updadeQText)
  139. self._layoutV.addLayout(self._layoutH)
  140. self._layoutV.addLayout(self._layoutGL)
  141. self._layoutV.addWidget(self.conn_button)
  142. self._layoutV.addWidget(self.clear_button)
  143.  
  144. # instruct QDialog to display:
  145. self.setWindowTitle("Code receiver")
  146. self.setLayout(self._layoutV)
  147. self.setFocus()
  148.  
  149. # QT signal and slots connections
  150. self.conn_button.clicked.connect(self.open_tcp_connection)
  151. self.clear_button.clicked.connect(self.set_all_down)
  152. self.insert_code_1.clicked.connect(self.set_sim_highlight)
  153. self.insert_code_update_1.clicked.connect(self.set_update_text_sim)
  154. self.insert_code_2.clicked.connect(self.set_nao_highlight)
  155. self.insert_code_update_2.clicked.connect(self.set_update_text_nao)
  156. self.insert_code_3.clicked.connect(self.set_fome_highlight)
  157. self.insert_code_update_3.clicked.connect(self.set_update_text_fome)
  158. self.insert_code_4.clicked.connect(self.set_sede_highlight)
  159. self.insert_code_update_4.clicked.connect(self.set_update_text_sede)
  160. self.insert_code_5.clicked.connect(self.set_urinar_highlight)
  161. self.insert_code_update_5.clicked.connect(self.set_update_text_urinar)
  162. self.insert_code_6.clicked.connect(self.set_ar_highlight)
  163. self.insert_code_update_6.clicked.connect(self.set_update_text_ar)
  164. self.insert_code_7.clicked.connect(self.set_posicao_highlight)
  165. self.insert_code_update_7.clicked.connect(self.set_update_text_posicao)
  166.  
  167. # Useful methods:
  168. @staticmethod
  169. def pick_up_text_and_update(text, text_code):
  170. return text + ' ' + text_code
  171.  
  172. def open_tcp_connection(self):
  173. threading.Thread(target=self._asyncio_thread, args=(ASYNC_LOOP,)).start()
  174.  
  175. def set_update_text_sim(self):
  176. self._updadeQText.setText(self.pick_up_text_and_update(self._updadeQText.toPlainText(), 'SIM'))
  177.  
  178. def set_sim_highlight(self):
  179. self._l_sim.setStyleSheet(ACTIVATED_CSS)
  180.  
  181. def set_update_text_nao(self):
  182. self._updadeQText.setText(self.pick_up_text_and_update(self._updadeQText.toPlainText(), 'NÃO'))
  183.  
  184. def set_nao_highlight(self):
  185. self._l_nao.setStyleSheet(ACTIVATED_CSS)
  186.  
  187. def set_update_text_fome(self):
  188. self._updadeQText.setText(self.pick_up_text_and_update(self._updadeQText.toPlainText(), 'FOME'))
  189.  
  190. def set_fome_highlight(self):
  191. self._l_fome.setStyleSheet(ACTIVATED_CSS)
  192.  
  193. def set_update_text_sede(self):
  194. self._updadeQText.setText(self.pick_up_text_and_update(self._updadeQText.toPlainText(), 'SEDE'))
  195.  
  196. def set_sede_highlight(self):
  197. self._l_sede.setStyleSheet(ACTIVATED_CSS)
  198.  
  199. def set_update_text_urinar(self):
  200. self._updadeQText.setText(self.pick_up_text_and_update(self._updadeQText.toPlainText(), 'URINAR'))
  201.  
  202. def set_urinar_highlight(self):
  203. self._l_urinar.setStyleSheet(ACTIVATED_CSS)
  204.  
  205. def set_update_text_ar(self):
  206. self._updadeQText.setText(self.pick_up_text_and_update(self._updadeQText.toPlainText(), 'AR'))
  207.  
  208. def set_ar_highlight(self):
  209. self._l_ar.setStyleSheet(ACTIVATED_CSS_AR)
  210.  
  211. def set_update_text_posicao(self):
  212. self._updadeQText.setText(self.pick_up_text_and_update(self._updadeQText.toPlainText(), 'POSIÇÃO'))
  213.  
  214. def set_posicao_highlight(self):
  215. self._l_posicao.setStyleSheet(ACTIVATED_CSS)
  216.  
  217. def set_all_down(self):
  218. self._l_sim.setStyleSheet(NORMAL_CSS)
  219. self._l_nao.setStyleSheet(NORMAL_CSS)
  220. self._l_fome.setStyleSheet(NORMAL_CSS)
  221. self._l_sede.setStyleSheet(NORMAL_CSS)
  222. self._l_urinar.setStyleSheet(NORMAL_CSS)
  223. self._l_ar.setStyleSheet(NORMAL_CSS_AR)
  224. self._l_posicao.setStyleSheet(NORMAL_CSS)
  225.  
  226. def download_code(self):
  227. threading.Thread(target=self._asyncio_thread, args=(ASYNC_LOOP,)).start()
  228.  
  229. async def get_one_code(self, tcp_client):
  230. serv_code = tcp_client.read_only_one_code_from_server()
  231. self.clear_button.click()
  232. t_sound = PlaySoundThread(thread_id=serv_code,
  233. name=serv_code,
  234. counter=int(serv_code),
  235. index_vec=int(serv_code))
  236. t_sound.start()
  237. self.decode_code(serv_code)
  238. if tcp_client.count - 1 in [0, EW_CONSTANT + 1, EW_CONSTANT * 2 + 2,
  239. EW_CONSTANT * 3 + 3, EW_CONSTANT * 4 + 4,
  240. EW_CONSTANT * 5 + 5, EW_CONSTANT * 6 + 6]:
  241. self.update_code_in_label(serv_code)
  242. await asyncio.sleep(1)
  243. self.clear_button.click()
  244. elif tcp_client.count - 1 in [EW_CONSTANT * 7 + 7,
  245. EW_CONSTANT * 8 + 8, EW_CONSTANT * 9 + 9,
  246. EW_CONSTANT * 10 + 10, EW_CONSTANT * 11 + 11,
  247. EW_CONSTANT * 12 + 12, EW_CONSTANT * 13 + 13]:
  248. self.update_code_in_label(serv_code)
  249. await asyncio.sleep(1)
  250. self.clear_button.click()
  251. await asyncio.sleep(2)
  252. t_sound.join()
  253. return serv_code
  254.  
  255. def check_aviability_func(self):
  256. print('aviability')
  257.  
  258. def _asyncio_thread(self, async_loop):
  259. async_loop.run_until_complete(self.open_tcp_connections_and_enqueue())
  260.  
  261. async def open_tcp_connections_and_enqueue(self):
  262. print("opening connection...")
  263. TCP_CLIENT.init_connection_with_server()
  264. print("connection ok!")
  265. tasks = [self.get_one_code(tcp_client=TCP_CLIENT) for num in range(999)]
  266. completed, pending = await asyncio.wait(tasks)
  267. results = [task.result() for task in completed]
  268.  
  269. def decode_code(self, code):
  270. if code == 1:
  271. self.insert_code_1.click()
  272. elif code == 2:
  273. self.insert_code_2.click()
  274. elif code == 3:
  275. self.insert_code_3.click()
  276. elif code == 4:
  277. self.insert_code_4.click()
  278. elif code == 5:
  279. self.insert_code_5.click()
  280. elif code == 6:
  281. self.insert_code_6.click()
  282. elif code == 7:
  283. self.insert_code_7.click()
  284. else:
  285. print('unknown code received')
  286. self.set_all_down()
  287. print("error")
  288. exit(1)
  289.  
  290. def update_code_in_label(self, code):
  291. self.clear_button.click()
  292. print('code inside update: {}'.format(code))
  293. if code == 1:
  294. self.insert_code_update_1.click()
  295. elif code == 2:
  296. self.insert_code_update_2.click()
  297. elif code == 3:
  298. self.insert_code_update_3.click()
  299. elif code == 4:
  300. self.insert_code_update_4.click()
  301. elif code == 5:
  302. self.insert_code_update_5.click()
  303. elif code == 6:
  304. self.insert_code_update_6.click()
  305. elif code == 7:
  306. self.insert_code_update_7.click()
  307. #time.sleep(1)
  308. self.clear_button.click()
  309.  
  310. def closeEvent(self, event):
  311. close = QMessageBox.question(self,
  312. "QUIT",
  313. "Are you sure want to stop process?",
  314. QMessageBox.Yes | QMessageBox.No)
  315. if close == QMessageBox.Yes:
  316. event.accept()
  317. exit(-1)
  318. else:
  319. event.ignore
  320.  
  321.  
  322.  
  323. try:
  324. ap = QApplication(sys.argv)
  325. ap.setStyle('Fusion')
  326. ap.setStyleSheet('QApplication {background-color: black;}')
  327. dialog = QtSideGui()
  328. dialog.setStyleSheet('QtSideGui {background-color: black;}')
  329. dialog.show()
  330. sys.exit(ap.exec_())
  331. except Exception as e:
  332. print(e)
  333. QMessageBox.information(ap, 'Information', 'An error has occurred.')
  334.  
  335. ├── images
  336. │   ├── image1.png
  337. │   └── image2.png
  338. └── main.py
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement