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