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 最終效果
- 兩個任務可以同時運行,前後臺分離