PyQT多线程

QT中建议对UI的操作只能在主线程中,子线程的数据通过信号来发给主线程。

from PySide2.QtWidgets import QApplication,QTextBrowser
from PySide2.QtUiTools import QUiLoader
from threading import Thread
from PySide2.QtCore import Signal,QObject


class MySignals(QObject):
    #定义了一个信号,这个信号发给控件的类型是QTextBrowser,发送的消息类型是str字符串
    labeltxt=Signal(QTextBrowser,str)

class Calc:
    def __init__(self):

        #加载刚才设计的.ui文件
        self.ui = QUiLoader().load('D:/vs2019_wf/Calc/Calc/Calc.ui')

        #define signal instance
        self.ms=MySignals();
        #关联处理该信号的函数
        self.ms.labeltxt.connect(self.handleCalc_do)


        #给ui中的button对象添加clicked事件,触发后执行handleCalc函数,
        #QT称事件为信号(signal),处理函数为插槽(slot)
        self.ui.pushButton.clicked.connect(self.handleCalc_th)


    def handleCalc_th(self):
        def run():
            s1=1*100

            #发送信号,2个参数为定义信号时的2种类型
            self.ms.labeltxt.emit(self.ui.textBrowser_2,str(s1))
        t=Thread(target=run)
        t.start()

    #处理函数接收到信号的2个参数,q就是self.ui.textBrowser_2,s就是s1
    def handleCalc_do(self,q,s):

        q.append(str(s))

app = QApplication([])
Calc = Calc()
#创建UI,只是一闪而过
Calc.ui.show()
#一直循环显示和监听控件
app.exec_()

参考资料:http://www.python3.vip/tut/py/gui/qt_08/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值