1.新建一个界面,添加两个按钮
2.先单线程实现延时
2.1 main.py
内容如下:
from PyQt5.QtWidgets import QApplication,QMainWindow
from mainwindow import Ui_MainWindow
import sys,time,datetime
class My_UI(QMainWindow, Ui_MainWindow):
def __init__(self):
QMainWindow.__init__(self)
Ui_MainWindow.__init__(self)
self.setupUi(self)
self.connectSignalSlot()
def connectSignalSlot(self):
self.Btn_delay2s.clicked.connect(self.fun_delay2s)
self.Btn_delay10s.clicked.connect(self.fun_delay10s)
def fun_delay2s(self):
print('我按下了延时2秒按钮,开始时间:',datetime.datetime.now())
time.sleep(2) #延时2秒
print('延时2s结束,现在时间:', datetime.datetime.now())
def fun_delay10s(self):
print('我按下了延时10秒按钮,开始时间:',datetime.datetime.now())
time.sleep(10) #延时10秒
print('延时10s结束,现在时间:', datetime.datetime.now())
class CommonHelper:
def __init__(self):
pass
@staticmethod
def readQss(style):
with open(style, 'r') as f:
return f.read()
if __name__ == '__main__':
app = QApplication(sys.argv)
# 设置style
styleFile = './css.qss'
qssStyle = CommonHelper.readQss(styleFile)
app.setStyleSheet(qssStyle)
# 显示窗口
win = My_UI()
win.show()
sys.exit(app.exec_())
2.2 按下按钮,界面会卡死,两个延时不能同时进行
2.建立耗时任务线程类
2.1 新建 Class_delay.py
from PyQt5.QtCore import QThread, pyqtSignal
import time
class Delay_ns(QThread):
# 使用信号和UI主线程通讯
signal_over = pyqtSignal(str)
def __init__(self, time=1, parent=None):
super(Delay_ns, self).__init__(parent)
self.delay_time = time #设置延时时间
def run(self):
print('正在进行延时{0}秒'.format(self.delay_time))
time.sleep(self.delay_time)
self.signal_over.emit('结束信号:延时{0}结束'.format(self.delay_time))
return
2.2 修改 main.py
from PyQt5.QtWidgets import QApplication,QMainWindow
from mainwindow import Ui_MainWindow
import sys,time,datetime
from Class_delay import Delay_ns
class My_UI(QMainWindow, Ui_MainWindow):
def __init__(self):
QMainWindow.__init__(self)
Ui_MainWindow.__init__(self)
self.setupUi(self)
self.connectSignalSlot()
def connectSignalSlot(self):
self.Btn_delay2s.clicked.connect(self.fun_delay2s)
self.Btn_delay10s.clicked.connect(self.fun_delay10s)
def fun_delay2s(self):
print('我按下了延时2秒按钮,开始时间:',datetime.datetime.now())
self.delay2s = Delay_ns(2)
self.delay2s.signal_over.connect(self.thread_delay2s_over)
print('延时2s线程开始,函数退出,时间:', datetime.datetime.now())
self.delay2s.start() # 启动线程
def fun_delay10s(self):
print('我按下了延时10秒按钮,开始时间:',datetime.datetime.now())
self.delay10s = Delay_ns(10)
self.delay10s.signal_over.connect(self.thread_delay10s_over)
print('延时10s线程开始,函数退出,时间:', datetime.datetime.now())
self.delay10s.start() # 启动线程
def thread_delay2s_over(self,str):
print(str)
del self.delay2s
def thread_delay10s_over(self,str):
print(str)
del self.delay10s
class CommonHelper:
def __init__(self):
pass
@staticmethod
def readQss(style):
with open(style, 'r') as f:
return f.read()
if __name__ == '__main__':
app = QApplication(sys.argv)
# 设置style
styleFile = './css.qss'
qssStyle = CommonHelper.readQss(styleFile)
app.setStyleSheet(qssStyle)
# 显示窗口
win = My_UI()
win.show()
sys.exit(app.exec_())
2.3 最终效果
- 两个任务可以同时运行,前后台分离