【PyQt5-多线程】写PyQt5小界面的多线程错误示范和正确示范

本文介绍了在PyQt5中实现多线程的错误和正确方法,以避免GUI界面阻塞。错误示范将多线程函数置于RunThread外部,而正确做法是将多线程操作放入RunThread类中,确保线程安全并保持界面响应。
摘要由CSDN通过智能技术生成

【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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值