【PyQt5-多线程】写PyQt5小界面的多线程错误示范和正确示范
最近打算把写好的整个系统封装成一个QT的GUI界面,发现需要用多线程才能满足我同时打开多个ros进程以及VirtualBox软件的需求,因此下面给出错误示范和正确示范:
1. 错误示范,把需要多线程进行的函数放在RunThread()函数外面:
#-*- coding:utf-8 -*-
'''
PushButton
'''
__author__ = 'Xiaoyu Cai'
import sys,os,time
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import socket
def test_time(fuc1):
'''装饰器, 测量阻塞计时'''
def train(self):
start_time = time.time()
res = fuc1(self)
end_time = time.time()
print (end_time-start_time)
return res
return train
class TabDemo(QTabWidget,QThread):
def __init__(self, parent=None):
super(TabDemo, self).__init__(parent)
self.setGeometry(200,500,500,200)
self.tab1 = QWidget()
self.tab2 = QWidget()
self.tab3 = QWidget()
self.addTab(self.tab1,'启动力反馈器')
self.addTab(self.tab2,'启动机器人')
self.tab1UI()
self.tab2UI()
# self.tab3UI()
self.setWindowTitle("手术机器人启动台")
self.show()
def tab1UI(self):
layout = QFormLayout()
launch = QHBoxLayout()
setupTouch = QPushButton("打开Touch_Setup")
launch.addWidget(setupTouch)
setupTouch.clicked.connect(self.openTouchShell)
roslaunchGeomagic = QPushButton("Roslanuch Geomagic")
launch.addWidget(roslaunchGeomagic)
roslaunchGeomagic.clicked.connect(self.threadOpenGeomagic)
layout.addRow(QLabel("启动台"), launch)
# layout.addRow("生日", QLineEdit())
self.tab1.setLayout(layout)
def tab2UI(self):
layout = QFormLayout