多线程以及进度条
class RunThread(QThread):
update_pb = pyqtSignal(int)
terminate_thread = pyqtSignal() # 定义更新进度条的信号
def __init__(self):
super().__init__()
self.i = 0
self.tip = ''
def run(self):
global Orig_data
global File_dir
global Grid_size
global File_name
global tip
self.i = 10
self.update_pb.emit(self.i)
# get_data = inverse_data.get_orig_data(inverse_data, File_dir, Orig_data, Grid_size, File_name)
self.i = 30
self.update_pb.emit(self.i) #发送信号(发送的是30)
time.sleep(1)
recom_data = inverse_data.inverse_coor(inverse_data, get_data) #
self.i = 50
self.update_pb.emit(self.i)
time.sleep(1)
final_data = inverse_data.get_height(inverse_data, recom_data) #
self.i = 90
self.update_pb.emit(self.i)
time.sleep(1)
name = 'recom_' + File_name #
np.savetxt(os.path.join(File_dir, name), final_data, fmt='%.2f') #
self.i = 100
self.update_pb.emit(self.i) # 这里发出一个信号
time.sleep(1)
self.terminate_thread.emit() # 这里发出一个信号(提示程序处理数据完成,显示提示框)
def kill_thread(self): #定义一个结束线程的函数
self.terminate()
上面是定义的线程类,耗时的程序放在run()函数下。
下面是我信号传递出来要执行的函数:
def update_progressbar(self, int):
self.progressBar.setValue(int)
def show_finished(self):
a = QMessageBox()
a.information(self, '提示', tip)
self.thread.kill_thread()
下面是槽函数相应函数。
def on_pushButton_3_clicked (self):
self.thread.update_pb.connect(self.update_progressbar)
self.thread.terminate_thread.connect(self.show_finished)
self.thread.start()