pyqt线程停止

击停止后,虽然线程已经停止了,但是 `self.tool` 对象的状态仍然是运行中的,因此再次调用 `self.tool.start()` 方法时,会出现错误。需要在停止线程后,将 `self.tool` 对象重新实例化,以便再次启动线程。

修改 `stop_event_click` 方法如下:

``` python
def stop_event_click(self):
    self.tool.stop()
    self.tool = Tool()
```

这样在点击停止后,会先停止线程,然后重新实例化 `self.tool` 对象,这样再次点击开始时,就可以重新启动线程了。

同时,由于 `self.tool` 对象是在 Window 类的构造方法中创建的,因此在每次重新实例化 `self.tool` 对象时,也需要重新连接信号和槽,否则程序会出现错误。因此,需要在 `stop_event_click` 方法中添加重新连接信号和槽的代码,如下所示


from PyQt5.Qt import *
from threading import Thread
import random

WIDTH = 700
HEIGH = 580

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("的学习")
        self.resize(WIDTH,HEIGH)
        self.setup_ui()

        self.tool=Tool()
        self.tool.singal_list.connect(self.get_data)


    def setup_ui(self):
        self.text_brower=QTextBrowser(self)
        self.text_brower.resize(600,300)
        # self.text_brower.setStyleSheet('background-color:black;')

        self.start_btn=QPushButton('START',self)
        self.start_btn.setFixedSize(150,40)
        self.start_btn.move(20,330)
        self.start_btn.clicked.connect(self.start_event_click)

        self.stop_btn=QPushButton('STOP',self)
        self.stop_btn.setFixedSize(150,40)
        self.stop_btn.move(300,330)
        self.stop_btn.clicked.connect(self.stop_event_click)

    def start_event_click(self):
        self.tool.start()

    def stop_event_click(self):
        self.tool.stop()
        self.tool = Tool()
        self.tool.singal_list.connect(self.get_data)

    def get_data(self,ls:list):
        # print(str(ls))


        data=str(ls)
        print(data)
        self.text_brower.insertPlainText('\t'+data+'\n')
        # self.text_brower.setText(data)

        # cursor=self.text_brower.textCursor().End #移动光标
        # self.text_brower.moveCursor(cursor)  #获取光标

class Tool(QThread):
    singal_list=pyqtSignal(list)
    def __init__(self):
        super(Tool, self).__init__()
        self.state = False

    def run(self):
        while not self.state:
            data=[random.randint(10,500) for _ in range(10)]
            self.singal_list.emit(data)
            QThread.msleep(100)


    def stop(self):
        self.state = True




if __name__ == '__main__':
    import sys
    app=QApplication(sys.argv)

    win=Window()
    win.show()


    sys.exit(app.exec_())








  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值