当前位置:   article > 正文

python+pyqt5线程、定时器_python qt定时器

python qt定时器

写给自己

    python+Qt编写多线程的过程中,由于python和Qt都各自有各自的线程、定时器的书写方法,在此,将它整理一下。

python

线程的使用

  1. import threading
  2. import time
  3. def fun(arg):
  4. #do somthing
  5. print('call fun(arg=%d)' % arg)
  6. for i in range(4):
  7. my_thread = threading.Thread(target=fun,args=(i,))
  8. my_thread.start()
  9. # call fun(arg=0)
  10. # call fun(arg=1)
  11. # call fun(arg=2)
  12. # call fun(arg=3)

使用threading.Thread()函数创建线程,调用start()函数启动线程。

线程同步机制

编写多线程时,必然要考虑同步互斥,要用到互斥锁、条件变量、信号量等,参考如下博文:

https://www.cnblogs.com/Security-Darren/p/4732914.html

定时器

定时器是在threading里面的一个模块,每当定时器到期,调用一个函数,有关其例子,可以看:

定时循环线程的例子

在隔一段时间就抓取保存照片的程序中,简单的方法,就可以利用定时器,每隔一段时间启用线程,查看当前时间是否满足要求,满足则保存图片

  1. import threading
  2. import time
  3. def fun(arg):
  4. #判断并抓取图片
  5. print('call fun(arg=%d)' % arg)
  6. my_thread = threading.Timer(5, fun, args=[arg+1,])#每隔5秒重新启动该线程
  7. my_thread.start()
  8. fun(1)
  9. # call fun(arg=1)
  10. # call fun(arg=2)
  11. # call fun(arg=3)
  12. # call fun(arg=4)
  13. # call fun(arg=5)

pyqt5

线程

在PyQt5.QtCore模块中,有一个QThread,Qt的线程是跑Application上的,也就是说,没有调用Application的exec_()循环函数,是测试不了QThread的,但是QThread的使用方法,和Python中的threading.Thread是一样的,所以,在此先给出重写threading.Thread的测试

  1. import threading
  2. class PyThread(threading.Thread):
  3. def __init__(self):
  4. super(PyThread,self).__init__()
  5. #重写run函数,实现线程的工作
  6. def run(self):
  7. #do something
  8. print("call pythonThread fun")
  9. my_thread = PyThread()
  10. my_thread.start()
  11. #call pythonThread fun

pyqt5的写法:

  1. from PyQt5.QtCore import *
  2. from PyQt5.QtWidgets import *
  3. import sys
  4. class QtThread(QThread):
  5. def __init__(self):
  6. super(QtThread,self).__init__()
  7. #重写run函数,实现线程的工作
  8. def run(self):
  9. #do something
  10. print("call pyqt5Thread fun")
  11. class MainWindow(QWidget):
  12. def __init__(self):
  13. super().__init__()
  14. self.setGeometry(500,300,300,300)
  15. self.thread = QtThread()
  16. self.thread.start()
  17. if __name__ == '__main__':
  18. app = QApplication(sys.argv)
  19. app.setApplicationName("测试")
  20. window = MainWindow()
  21. window.show()
  22. sys.exit(app.exec_())

定时器

  1. from PyQt5.QtCore import *
  2. from PyQt5.QtWidgets import *
  3. import sys
  4. class QtThread(QThread):
  5. def __init__(self):
  6. super(QtThread,self).__init__()
  7. #重写run函数,实现线程的工作
  8. def run(self):
  9. #do something
  10. print("call pyqt5Thread fun")
  11. class MainWindow(QWidget):
  12. def __init__(self):
  13. super().__init__()
  14. self.setGeometry(500,300,300,300)
  15. self.thread = QtThread()
  16. self.thread.start()
  17. self.timer = QTimer()
  18. self.timer.start(5000) #每过5秒,定时器到期,产生timeout的信号
  19. self.timer.timeout.connect(self.call_thread)
  20. def call_thread(self):
  21. self.thread = QtThread()
  22. self.thread.start()
  23. if __name__ == '__main__':
  24. app = QApplication(sys.argv)
  25. app.setApplicationName("测试")
  26. window = MainWindow()
  27. window.show()
  28. sys.exit(app.exec_())

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/797747
推荐阅读
相关标签
  

闽ICP备14008679号