pyqt多线程操作

多线程是实现并发的一个重要手段。在GUI编程中,经常需要将耗费时间较多的任务分离出来成为一个线程,避免对主线程造成影响(造成界面无响应)。

在Qt中,最简单的多线程主要通过继承QThread类实现,重载虚函数run()。

1、一般我们先创建一个QThread子类,其中最主要的是run函数,当进程开始时会执行这个函数。
2、pyqtSignal()代表pyqt信号,我们在run的结束加一个结束退出信号。这个信号可以绑定connect一个函数,当结束时便会执行此函数。
注意:对于信号这个东西,emit也可以传递参数,如果想传递参数,那么绑定的函数也得有参数,并且pyqtSignal创建的时候也得带上参数类型。比如这里我们返回一个状态。

class DownloadThread(QThread):
    trigger = pyqtSignal(str)
    def __int__(self):
        super(DownloadThread, self).__init__()
    def set_port_url(self,port_default,url):
        self.port_default = port_default
        self.url = url
    def run(self):
        try:

            # # 循环完毕后发出信号
            self.trigger.emit("success!")
        except Exception as e:
            self.trigger.emit("fail!")

3、在pyqt界面中,我们会创建一个类,然后为它连接connect一个结束函数,并且通过set_val设定参数,最后start。

class win():
	...
	...
    def download(self):
        if self.ok:
            self.content_tmp = self.content_tmp + "%s:Send the task to server\n" % (
                time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
            self.tmp.setText(self.content_tmp)
            self.thread = DownloadThread()
            self.thread.set_port_url(self.port_default,self.file_url.text())  # 创建
            self.thread.trigger.connect(self.finish)  # 连接信号
            self.thread.start()  # 开始线程
        else:
            reply = QMessageBox.question(self, 'Message',
                                         "You should set port first", QMessageBox.Yes)
    def finish(self,status):
    	if status == 'success!'
        	self.content_tmp = self.content_tmp + "%s:Finish!\n" % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
        	self.tmp.setText(self.content_tmp)
		else:
			print('fali!')
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值