第一个pyqt小软件

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'))

效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值