zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    input上传限定文件类型
    扫描二维码自动识别手机系统(Android/IOS)
    css/html/Javascript
    移动端容易碰到的点击穿透的坑
    洛谷P3387 【模板】缩点
    洛谷P1137 旅行计划
    洛谷P2324 [SCOI2005]骑士精神
    洛谷P2571 [SCOI2010]传送带
    BZOJ4300: 绝世好题
    [洛谷P1966] 火柴排队
  • 原文地址:https://www.cnblogs.com/JinweiChang/p/13739579.html
Copyright © 2011-2022 走看看