PyQt 线程类 QThread使用详解

PyQt 线程类 QThread使用详解,第1张

概述PyQt中的线程类QtCore.QThread,使用时继承QThread类启动界面的线程暂称为UI线程。界面执行命令时都在自己的UI线程中。

PyQt中的线程类 QtCore.QThread ,使用时继承QThread类

启动界面的线程暂称为UI线程。界面执行命令时都在自己的UI线程中。

如果在UI线程中执行网络连接和数据库 *** 作等耗时的 *** 作,界面会被卡住,windows下有可能会出现“无响应”的警告。

阻塞UI线程会降低用户体验和应用稳定性。因此我们可以把耗时 *** 作放在线程中去执行。

QThread代表一个线程,我们可以复写run函数来执行我们要的 *** 作。

QThread可以使用 QtCore.pyqtSignal 来与界面交互和传输数据。

PyQt4 QThread 代码示例

•Python2.7# -*- Coding: utf-8 -*-import sysfrom PyQt4 import QtCorefrom PyQt4.QtCore import QCoreApplicationfrom PyQt4.QtGui import QWidget,QPushbutton,QApplication,QTextbrowserclass TimeThread(QtCore.QThread):  signal_time = QtCore.pyqtSignal(str,int) # 信号  def __init__(self,parent=None):    super(TimeThread,self).__init__(parent)    self.working = True    self.num = 0  def start_timer(self):    self.num = 0    self.start()  def run(self):    while self.working:      print "Working",self.thread()      self.signal_time.emit("Running time:",self.num) # 发送信号      self.num += 1      self.sleep(1)class TimeDialog(QWidget):  def __init__(self):    super(TimeDialog,self).__init__()    self.timer_tv = QTextbrowser(self)    self.init_ui()    self.timer_t = TimeThread()    self.timer_t.signal_time.connect(self.update_timer_tv)  def init_ui(self):    self.resize(300,200)    self.setwindowTitle('TimeDialog')    self.timer_tv.setText("Wait")    self.timer_tv.setGeometry(QtCore.QRect(10,145,198,26))    self.timer_tv.move(0,15)    btn1 = QPushbutton('Quit',self)    btn1.settooltip('Click to quit')    btn1.resize(btn1.sizeHint())    btn1.move(200,150)    btn1.clicked.connect(QCoreApplication.instance().quit)    start_btn = QPushbutton('Start',self)    start_btn.settooltip("Click to start")    start_btn.move(50,150)    self.connect(start_btn,QtCore.SIGNAL("clicked()"),self.click_start_btn)  def click_start_btn(self):    self.timer_t.start_timer()  def update_timer_tv(self,text,number):    self.timer_tv.setText(self.tr(text + " " + str(number)))if __name__ == '__main__':  app = QApplication(sys.argv)  time_dialog = TimeDialog()  time_dialog.show()  sys.exit(app.exec_())


QThread中使用的信号 signal_time = QtCore.pyqtSignal(str,int) 指定了参数str和int

发送信号 self.signal_time.emit("Running time:",self.num)

外部接收信号 self.timer_t.signal_time.connect(self.update_timer_tv)
信号连接到方法 update_timer_tv(self,number) ,注意信号与方法的参数要一一对应

使用中我们可以定义多种不同的信号 QtCore.pyqtSignal

启动线程,调用 start()

总结

以上是内存溢出为你收集整理的PyQt 线程类 QThread使用详解全部内容,希望文章能够帮你解决PyQt 线程类 QThread使用详解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1201886.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-04
下一篇2022-06-04

发表评论

登录后才能评论

评论列表(0条)

    保存