Python中界面阻塞情况的解决方案


# 建议所有的界面更新动作都放在主线程中,否则textEdit控件可能会出现程序崩溃的问题

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


# 定义信号源
class Mysignals(QObject):
    # 定义一个信号
    text_print = Signal(str)


class Stat:
    def __init__(self):
        self.ui = QUiLoader().load('ui/test.ui')
        self.ui.button.clicked.connect(self.handleCalc)
        self.ms = Mysignals()
        # 监听自定义信号
        self.ms.text_print.connect(self.update_ui)

    def update_ui(self, str1):
        self.ui.textedit.setPlainText(str1)

    def handleCalc(self):
        def download():
            info = ''
            for i in range(5):
                info += f'正在下载-----{i}\n'
                # 发射自定义信号
                self.ms.text_print.emit(info)
                sleep(1)

        t1 = Thread(target=download)
        t1.start()


app = QApplication()
stat = Stat()
stat.ui.show()
app.exec_()


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM