日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

pyside6兩個(gè)按鈕,一個(gè)控制子線程的開始,暫停,。一個(gè)控制子線程結(jié)束

作者:沒掉發(fā)的程序員 更新時(shí)間: 2023-11-23 編程語言

以下是一個(gè)使用 PySide6 創(chuàng)建兩個(gè)按鈕的示例,一個(gè)按鈕用于控制子線程的開始和暫停,另一個(gè)按鈕用于控制子線程的結(jié)束:

import time
from PySide6.QtCore import Qt, QThread, Signal, Slot
from PySide6.QtWidgets import QApplication, QVBoxLayout, QWidget, QPushButton


# 自定義子線程類
class WorkerThread(QThread):
    status_changed = Signal(str)  # 自定義信號(hào),用于更新狀態(tài)

    def __init__(self, parent=None):
        super().__init__(parent)
        self.paused = False
        self.stopped = False

    def run(self):
        count = 0
        while True:
            if not self.paused:
                count += 1
                self.status_changed.emit(f"Count: {count}")
                time.sleep(1)
            if self.stopped:
                break

    def pause(self):
        self.paused = True

    def resume(self):
        self.paused = False

    def stop(self):
        self.stopped = True


# 主窗口類
class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.thread = None
        self.start_pause_button = QPushButton("Start")
        self.stop_button = QPushButton("Stop")

        layout = QVBoxLayout()
        layout.addWidget(self.start_pause_button)
        layout.addWidget(self.stop_button)

        self.setLayout(layout)
        self.setWindowTitle("Thread Example")

        self.start_pause_button.clicked.connect(self.start_pause_thread)
        self.stop_button.clicked.connect(self.stop_thread)

        self.update_button_state()

    def start_pause_thread(self):
        if not self.thread or not self.thread.isRunning():
            self.thread = WorkerThread()
            self.thread.status_changed.connect(self.update_status)
            self.thread.started.connect(self.update_button_state)
            self.thread.finished.connect(self.update_button_state)

            self.thread.start()
            self.update_status("Thread started.")
        elif self.thread.paused:
            self.thread.resume()
            self.update_status("Thread resumed.")
        else:
            self.thread.pause()
            self.update_status("Thread paused.")

    def stop_thread(self):
        if self.thread and self.thread.isRunning():
            self.thread.stop()
            self.thread.wait()

            self.update_button_state()
            self.update_status("Thread stopped.")

    @Slot(str)
    def update_status(self, text):
        print(text)  # 輸出到控制臺(tái)
        # 在此處更新你的界面的狀態(tài)標(biāo)簽、日志等

    def update_button_state(self):
        is_running = self.thread and self.thread.isRunning()
        self.start_pause_button.setEnabled(True)
        self.stop_button.setEnabled(is_running)


if __name__ == "__main__":
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec()

在這個(gè)示例中,我們創(chuàng)建了兩個(gè)按鈕:一個(gè)按鈕用于控制子線程的開始和暫停,另一個(gè)按鈕用于控制子線程的結(jié)束。當(dāng)點(diǎn)擊 "Start" 按鈕時(shí),將會(huì)啟動(dòng)子線程并開始計(jì)數(shù)。如果線程已經(jīng)在運(yùn)行,則點(diǎn)擊按鈕將使線程進(jìn)入暫停狀態(tài),并再次點(diǎn)擊按鈕將恢復(fù)線程。

點(diǎn)擊 "Stop" 按鈕將結(jié)束子線程并停止計(jì)數(shù)。在狀態(tài)更新時(shí)(通過 update_status 函數(shù)),你可以根據(jù)需要進(jìn)行適當(dāng)?shù)奶幚砗驮诮缑嫔系恼故尽?/p>

運(yùn)行代碼后,將顯示一個(gè)具有控制子線程開始、暫停和結(jié)束功能的窗口。請(qǐng)根據(jù)你的需求,更新示例中的按鈕文本、界面元素和狀態(tài)更新函數(shù)來滿足你的實(shí)際需求。請(qǐng)注意,在這個(gè)示例中,輸出狀態(tài)信息到控制臺(tái),你可以根據(jù)需要調(diào)整狀態(tài)信息的展示方式。

原文鏈接:https://blog.csdn.net/qq_21041371/article/details/131316394

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新