相關(guān)推薦
您可能對下面課程感興趣
Python上位機(jī)開發(fā)教程

99小節(jié)已有4502人學(xué)過

Python上位機(jī)開發(fā)PySide6多線程方式一
發(fā)布時(shí)間:2024-11-20 10:03 [ 我要自學(xué)網(wǎng)原創(chuàng) ] 發(fā)布人: 快樂小女 閱讀: 70

import time

from PySide6.QtWidgets import *
from PySide6.QtCore import *
from PySide6.QtGui import *
from page import Ui_Form


class Worker(QObject):
    data_signal = Signal(int)
    finish_signal = Signal()

    def __init__(self):
        super().__init__()
        self.running = False
        self.pausing = False

    def workRun(self):
        self.running = True

        a = 0
        while self.running:
            if self.pausing:
                time.sleep(0.01)
                continue
            time.sleep(0.1)
            self.data_signal.emit(a)
            a += 1
            if a > 100: break

        self.finish_signal.emit()

    def stop(self):
        self.running = False

    def pause(self):
        self.pausing = True

    def resume(self):
        self.pausing = False


class Window(QWidget, Ui_Form):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        #按鈕使能
        self.pushButton_start.setEnabled(True)
        self.pushButton_stop.setEnabled(False)
        self.pushButton_pause.setEnabled(False)
        self.pushButton_resume.setEnabled(False)


    def onBtnStartClick(self):

        self.work = Worker()
        self.t =QThread()
        self.work.moveToThread(self.t)
        self.t.start()


        #slot
        self.work.data_signal.connect(lambda x:self.progressBar.setValue(x))
        self.work.finish_signal.connect(self.on_work_finish)
        self.t.started.connect(self.work.workRun)
        self.t.finished.connect(self.on_thread_finish)

        # 按鈕使能
        self.pushButton_start.setEnabled(False)
        self.pushButton_stop.setEnabled(True)
        self.pushButton_pause.setEnabled(True)
        self.pushButton_resume.setEnabled(True)

    def on_work_finish(self):
        self.t.quit()
        self.t.wait()
        print("完成")

    def onBtnStopClick(self):

        self.work.stop()
        #按鈕使能
        self.pushButton_start.setEnabled(True)
        self.pushButton_stop.setEnabled(False)
        self.pushButton_pause.setEnabled(False)
        self.pushButton_resume.setEnabled(False)

    def onBtnPauseClick(self):

        self.work.pause()

    def onBtnResumeClick(self):

        self.work.resume()

    def on_thread_finish(self):
        self.work.deleteLater()
        self.t.deleteLater()
        print("線程銷毀")


if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec())

文章評論
添加表情
遵守中華人民共和國的各項(xiàng)道德法規(guī),
承擔(dān)因您的行為而導(dǎo)致的法律責(zé)任,
本站有權(quán)保留或刪除有爭議評論。
參與本評論即表明您已經(jīng)閱讀并接受
上述條款。
V
特惠充值
聯(lián)系客服
APP下載
官方微信
返回頂部
相關(guān)推薦
您可能對下面課程感興趣
Python上位機(jī)開發(fā)教程

99小節(jié)已有4502人學(xué)過

分類選擇:
電腦辦公 平面設(shè)計(jì) 室內(nèi)設(shè)計(jì) 室外設(shè)計(jì) 機(jī)械設(shè)計(jì) 工業(yè)自動化 影視動畫 程序開發(fā) 網(wǎng)頁設(shè)計(jì) 會計(jì)課程 興趣成長 AIGC