NodeHost/mainwindow.py

162 lines
6.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import sys
import serial
import serial.tools.list_ports
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from drawwindow import DrawWindow
from aboutwindow import AboutWindow
from serialhandler import SerialHandler
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setWindowTitle('NoidHost')
self.setWindowIcon(QIcon('gml.png'))
self.statusbar = self.statusBar()
self.statusbar.showMessage('等待连接')
menubar = self.menuBar()
# 菜单栏-文件
exit_action = QAction('&退出', self)
exit_action.setShortcut('Ctrl+Q')
exit_action.setStatusTip('退出应用')
exit_action.triggered.connect(lambda: sys.exit())
menubar_file = menubar.addMenu('文件')
menubar_file.addAction(exit_action)
# 菜单栏-曲线
draw_node2_action = QAction('&节点2', self)
draw_node3_action = QAction('&节点3', self)
draw_node4_action = QAction('&节点4', self)
draw_node5_action = QAction('&节点5', self)
self.node2_drawwindow = DrawWindow()
self.node3_drawwindow = DrawWindow()
self.node4_drawwindow = DrawWindow()
self.node5_drawwindow = DrawWindow()
menubar_draw = menubar.addMenu('曲线')
menubar_draw.addAction(draw_node2_action)
menubar_draw.addAction(draw_node3_action)
menubar_draw.addAction(draw_node4_action)
menubar_draw.addAction(draw_node5_action)
draw_node2_action.triggered.connect(
lambda: self.drawStart(2))
draw_node3_action.triggered.connect(
lambda: self.drawStart(3))
draw_node4_action.triggered.connect(
lambda: self.drawStart(4))
draw_node5_action.triggered.connect(
lambda: self.drawStart(5))
# 菜单栏-关于
self.aboutwindow = AboutWindow()
about_action = QAction('&关于', self)
about_action.setShortcut('Ctrl+A')
about_action.setStatusTip('关于')
about_action.triggered.connect(lambda: self.aboutwindow.show())
menubar_about = menubar.addMenu('关于')
menubar_about.addAction(about_action)
self.label_node2 = QLabel(
'节点2 湿度: % 温度: °C 光照度: lx ')
self.label_node3 = QLabel(
'节点3 湿度: % 温度: °C 光照度: lx ', self)
self.label_node4 = QLabel(
'节点4 湿度: % 温度: °C 光照度: lx ', self)
self.label_node5 = QLabel(
'节点5 湿度: % 温度: °C 光照度: lx ', self)
self.combobox = QComboBox()
self.port_list = serial.tools.list_ports.comports()
for port in self.port_list:
self.combobox.addItem(port.description)
self.btnStart = QPushButton('开始')
self.btnExit = QPushButton('退出')
self.btnScanPort = QPushButton('刷新串口')
# 实例化多线程对象
self.handler = SerialHandler(self.port_list[0].name)
# 把控件放置在栅格布局中
layout = QGridLayout()
layout.addWidget(self.label_node2, 1, 1, 1, 4)
layout.addWidget(self.label_node3, 2, 1, 1, 4)
layout.addWidget(self.label_node4, 3, 1, 1, 4)
layout.addWidget(self.label_node5, 4, 1, 1, 4)
layout.addWidget(self.btnScanPort, 5, 1, 1, 1)
layout.addWidget(self.combobox, 5, 2, 1, 1)
layout.addWidget(self.btnStart, 5, 3, 1, 1)
layout.addWidget(self.btnExit, 5, 4, 1, 1)
self.widget = QWidget()
self.widget.setLayout(layout)
self.widget.setStyleSheet("QLabel{font-size: 18pt;}")
self.setCentralWidget(self.widget)
# 信号与槽函数的连接
self.handler.sign_node.connect(self.slotUpdateNode)
self.combobox.currentIndexChanged.connect(self.slotSelectPort)
self.btnScanPort.clicked.connect(self.slotScanPort)
self.btnStart.clicked.connect(self.slotStart)
self.btnExit.clicked.connect(lambda: sys.exit())
def slotScanPort(self):
self.port_list = serial.tools.list_ports.comports()
self.combobox.clear()
for port in self.port_list:
self.combobox.addItem(port.description)
self.handler.port_name = self.port_list[0].name
def slotSelectPort(self, index):
self.handler.port_name = self.port_list[index].name
def slotUpdateNode(self, node_seq: int, node_data: dict):
# 更新
if (node_seq == 2):
self.label_node2.setText(
f"节点2 湿度:{node_data['humi']}% 温度:{node_data['temp']}°C 光照度:{node_data['light']}lx")
if (node_seq == 3):
self.label_node3.setText(
f"节点3 湿度:{node_data['humi']}% 温度:{node_data['temp']}°C 光照度:{node_data['light']}lx")
if (node_seq == 4):
self.label_node4.setText(
f"节点4 湿度:{node_data['humi']}% 温度:{node_data['temp']}°C 光照度:{node_data['light']}lx")
if (node_seq == 5):
self.label_node5.setText(
f"节点5 湿度:{node_data['humi']}% 温度:{node_data['temp']}°C 光照度:{node_data['light']}lx")
def slotStart(self):
self.combobox.setEnabled(False)
self.btnScanPort.setEnabled(False)
self.btnStart.setEnabled(False)
self.btnExit.setEnabled(True)
self.statusbar.showMessage('已连接')
self.handler.start()
def drawStart(self, node_seq: int):
if node_seq == 2:
self.handler.sign_node.connect(self.node2_drawwindow.addPoint)
self.node2_drawwindow.start(node_seq)
elif node_seq == 3:
self.handler.sign_node.connect(self.node3_drawwindow.addPoint)
self.node3_drawwindow.start(node_seq)
elif node_seq == 4:
self.handler.sign_node.connect(self.node4_drawwindow.addPoint)
self.node4_drawwindow.start(node_seq)
elif node_seq == 5:
self.handler.sign_node.connect(self.node5_drawwindow.addPoint)
self.node5_drawwindow.start(node_seq)