URD360.py:
#!/usr/bin/python3.5
import func
import sys
import os
#引入模块,基本控件位于pyqt5.qtwidgets
from PyQt5.QtWidgets import QApplication, QWidget, QDesktopWidget
from PyQt5 import QtCore, QtGui, QtWidgets
class QMainWindow(QtWidgets.QMainWindow):
"""对QMainWindow类重写,实现一些功能"""
def closeEvent(self, event):
"""
重写closeEvent方法,实现dialog窗体关闭时执行一些代码
:param event: close()触发的事件
:return: None
"""
reply = QtWidgets.QMessageBox.question(self,
'Exit',
"Do you really want to exit 'URD360'?",
QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No,
QtWidgets.QMessageBox.No)
if reply == QtWidgets.QMessageBox.Yes:
event.accept()
os.system("killall -2 ./driver.elf")
else:
event.ignore()
if __name__ == "__main__":
getcmd = os.popen("ps -aux |grep 'URD360.py'", "r")
getcmd_read = getcmd.read()
#print(getcmd_read)
app = QApplication(sys.argv)
#file = open("res-css-black.css", 'r')
#app.setStyleSheet(file.read())
app.setStyleSheet("QScrollBar:vertical"
"{"
"width:8px;"
"background:#565656;"
"margin:0px,0px,0px,0px;"
"padding-top:9px;"
"padding-bottom:9px;"
"}"
"QScrollBar::handle:vertical"
"{"
"width:8px;"
"background:#6b6b6b;"
" border-radius:4px;"
"min-height:20;"
"}"
"QScrollBar::handle:vertical:hover"
"{"
"width:8px;"
"background:#b9b9b9;"
" border-radius:4px;"
"min-height:20;"
"}"
"QTextBrowser{background-color: #2f2f2f;color: #adadad}"
)
MainWindow = QMainWindow()
screen = QApplication.desktop().screenGeometry()
#print(screen.width())
MainWindow.move((screen.width()-1220)/2, (screen.height()-700)/2)
if getcmd_read.count("/usr/bin/python3.5 ./URD360.py") > 1:
#print(getcmd_read.count("/usr/bin/python3.5 ./URD360.py"))
msgBox = QtWidgets.QMessageBox.about(MainWindow, 'Warninig', "'URD360' is running")
sys.exit(0)
else:
ui = func.func_ui(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
func.py:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'func.ui'
#
# Created by: PyQt5 UI code generator 5.5.1
#
# WARNING! All changes made in this file will be lost!
from subprocess import Popen
from threading import Thread
import time
from PyQt5 import QtCore, QtGui, QtWidgets
import subprocess
from PyQt5.QtWidgets import QFrame
from PyQt5.QtGui import QColor
from PyQt5.QtCore import *
Driver_process = 0
Arm_process = None
class Ui_MainWindow(object):
def __init__(self,MainWindow):
self.MainWindow = MainWindow
super().__init__()
self.setupUi(self.MainWindow)
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1220, 700)
# self.ads = QtWidgets.QWidget(MainWindow)
# self.ads.setObjectName("ads")
self.horizontalLayoutWidget = QtWidgets.QWidget()
self.horizontalLayoutWidget.setGeometry(QtCore.QRect(50, 80, 871, 521))
self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
self.horizontalLayout.setObjectName("horizontalLayout")
self.verticalLayout_5 = QtWidgets.QVBoxLayout()
self.verticalLayout_5.setObjectName("verticalLayout_5")
self.driverWin_label = QtWidgets.QLabel(self.horizontalLayoutWidget)
self.driverWin_label.setObjectName("driverWin_label")
self.verticalLayout_5.addWidget(self.driverWin_label, 0, QtCore.Qt.AlignHCenter)
self.driver_win = QtWidgets.QTextBrowser(self.horizontalLayoutWidget)
self.driver_win.setObjectName("textBrowser")
self.verticalLayout_5.addWidget(self.driver_win)
self.horizontalLayout.addLayout(self.verticalLayout_5)
self.verticalLayout_3 = QtWidgets.QVBoxLayout()
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.label = QtWidgets.QLabel(self.horizontalLayoutWidget)
self.label.setText("")
self.label.setObjectName("label")
self.verticalLayout_3.addWidget(self.label)
self.start_button = QtWidgets.QPushButton(self.horizontalLayoutWidget)
self.start_button.setObjectName("start_button")
self.verticalLayout_3.addWidget(self.start_button)
self.stop_button = QtWidgets.QPushButton(self.horizontalLayoutWidget)
self.stop_button.setObjectName("stop_button")
self.verticalLayout_3.addWidget(self.stop_button)
self.update_button = QtWidgets.QPushButton(self.horizontalLayoutWidget)
self.update_button.setObjectName("update_button")
self.verticalLayout_3.addWidget(self.update_button)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_3.addItem(spacerItem)
self.horizontalLayout.addLayout(self.verticalLayout_3)
self.verticalLayout_4 = QtWidgets.QVBoxLayout()
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.armWin_label = QtWidgets.QLabel(self.horizontalLayoutWidget)
self.armWin_label.setObjectName("armWin_label")
self.verticalLayout_4.addWidget(self.armWin_label, 0, QtCore.Qt.AlignHCenter)
self.armWin = QtWidgets.QTextBrowser(self.horizontalLayoutWidget)
self.armWin.setObjectName("armWin")
self.verticalLayout_4.addWidget(self.armWin)
self.transmitWin_label = QtWidgets.QLabel(self.horizontalLayoutWidget)
self.transmitWin_label.setObjectName("transmitWin_label")
self.verticalLayout_4.addWidget(self.transmitWin_label, 0, QtCore.Qt.AlignHCenter)
self.transmitWin = QtWidgets.QTextBrowser(self.horizontalLayoutWidget)
self.transmitWin.setObjectName("transmitWin")
self.verticalLayout_4.addWidget(self.transmitWin)
self.horizontalLayout.addLayout(self.verticalLayout_4)
MainWindow.setCentralWidget(self.horizontalLayoutWidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 1014, 26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
#self.driver_win.append("%s" % '111')
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "URD360"))
self.driverWin_label.setText(_translate("MainWindow", "driver window"))
self.start_button.setText(_translate("MainWindow", "start"))
self.start_button.setToolTip("start scanning")
self.stop_button.setText(_translate("MainWindow", "stop"))
self.stop_button.setToolTip("stop scanning")
self.update_button.setText(_translate("MainWindow", "update"))
self.update_button.setToolTip("update 'GPS' and 'SystemAzimuth'")
self.armWin_label.setText(_translate("MainWindow", "arm window"))
self.transmitWin_label.setText(_translate("MainWindow", "monitor window"))
'''col = QColorDialog.getColor()
print(col.name())'''
self.start_button.setStyleSheet("QPushButton{font-weight: bold}"
"QPushButton:hover{background-color:#aaffff; color:black;}"
"QPushButton:pressed{background-color: #ffd2ca}")
self.stop_button.setStyleSheet("QPushButton{font-weight: bold}"
"QPushButton:hover{background-color:#aaffff; color:black;}"
"QPushButton:pressed{background-color: #ffd2ca}")
self.update_button.setStyleSheet("QPushButton{font-weight: bold}"
"QPushButton:hover{background-color:#aaffff; color:black;}"
"QPushButton:pressed{background-color: #ffd2ca}")
self.driverWin_label.setStyleSheet("QLabel{color: #cccccc}")
self.transmitWin_label.setStyleSheet("color: #cccccc")
self.armWin_label.setStyleSheet("color: #cccccc")
MainWindow.setStyleSheet("#MainWindow{background-color: #565656}")
'''self.driver_win.setStyleSheet("QTextBrowser{background-color: #2f2f2f;color: #cccccc}")
self.transmitWin.setStyleSheet("background-color: #2f2f2f;color: #cccccc")
self.armWin.setStyleSheet("background-color: #2f2f2f;color: #cccccc")'''
self.driver_win.setFrameShape(QFrame.Box) #set box
self.armWin.setFrameShape(QFrame.Box)
self.transmitWin.setFrameShape(QFrame.Box)
self.driver_win.document().setMaximumBlockCount(100) #set max
self.transmitWin.document().setMaximumBlockCount(100)
self.armWin.document().setMaximumBlockCount(100)
class show_thred(QThread):
sinOut = pyqtSignal(str)
def __init__(self, data, flag):
self.data = data
self.flag = flag
super().__init__()
def run(self):
while True:
if self.data.poll() is None:
if self.flag == 2:
print(self.data.poll())
outputdata = self.data.stdout.readline()
self.sinOut.emit(str(outputdata, 'utf-8'))
elif self.data.poll() is not None:
if self.flag == 1:
self.data = Popen('./arm_control "101;;;qt"', stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=True)
global Arm_process
Arm_process = self.data
class func_ui(Ui_MainWindow):
driver_thread = ... # type: Thread
data = ... # type: Popen
driver_show = ...
def __init__(self, MainWindow):
self.MainWindow = MainWindow
super().__init__(self.MainWindow)
self.commander_process = subprocess.Popen('./commander >>/dev/null 2>/dev/null &', stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=True)
self.monitor_process = subprocess.Popen('./monitor', stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
self.monitor_show = show_thred(self.monitor_process, 0)
self.monitor_show.Daemon = True
self.monitor_show.sinOut.connect(self.show_monitor_text)
self.monitor_show.start()
self.start_button.clicked.connect(self.start_button_click)
self.start_button.setProperty("default_style", True)
self.stop_button.clicked.connect(self.stop_button_click)
self.stop_button.setProperty("default_style", True)
self.update_button.clicked.connect(self.update_button_click)
self.update_button.setProperty("default_style", True)
global Driver_process
Driver_process = subprocess.Popen('./driver.elf "qt"', stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, shell=True)
self.driver_show = show_thred(Driver_process, 0)
self.driver_show.Daemon = True
self.driver_show.sinOut.connect(self.show_driver_text)
self.driver_show.start()
#time.sleep(2)
global Arm_process
Arm_process = subprocess.Popen('./arm_control "101;;;qt"', stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, shell=True)
self.arm_show = show_thred(Arm_process, 1)
self.arm_show.Daemon = True
self.arm_show.sinOut.connect(self.show_arm_text)
self.arm_show.start()
Driver_process.stdin.write(("start\n").encode())
Driver_process.stdin.flush()
#self.start_button.clicked.connect(self.start_button_click)
#self.stop_button.clicked.connect(self.stop_button_click)
@pyqtSlot()
def start_button_click(self):
global Arm_process
Arm_process.stdin.write(("2\n").encode())
Arm_process.stdin.flush()
@pyqtSlot()
def stop_button_click(self):
global Arm_process
Arm_process.stdin.write(("3\n").encode())
Arm_process.stdin.flush()
@pyqtSlot()
def update_button_click(self):
global Arm_process
Arm_process.stdin.write(("5\n").encode())
Arm_process.stdin.flush()
def show_driver_text(self, msg):
msg = msg.replace('\033[31m', "<font color='#e24640'>")
msg = msg.replace('\033[32m', "<font color='green'>")
msg = msg.replace('\033[33m', "<font color='Goldenrod'>")
msg = msg.replace('\033[34m', "<font color='blue'>")
msg = msg.replace('\033[0m', '')
if '<font' in msg:
self.driver_win.append(msg.rstrip('\n') + "</font> ")
else:
self.driver_win.append(msg.rstrip('\n'))
def show_arm_text(self, msg):
msg = msg.replace('\033[31m', "<font color='#e24640'>")
msg = msg.replace('\033[32m', "<font color='green'>")
msg = msg.replace('\033[33m', "<font color='Goldenrod'>")
msg = msg.replace('\033[34m', "<font color='blue'>")
msg = msg.replace('\033[0m', '')
if '<font' in msg:
self.armWin.append(msg.rstrip('\n') + "</font> ")
else:
self.armWin.append(msg.rstrip('\n'))
def show_monitor_text(self, msg):
msg = msg.replace('\033[31m', "<font color='#e24640'>")
msg = msg.replace('\033[32m', "<font color='green'>")
msg = msg.replace('\033[33m', "<font color='Goldenrod'>")
msg = msg.replace('\033[34m', "<font color='blue'>")
msg = msg.replace('\033[0m', '')
if '<font' in msg:
self.transmitWin.append(msg.rstrip('\n') + "</font> ")
else:
self.transmitWin.append(msg.rstrip('\n'))
效果