我对PyQT还很陌生。正在学习如何制作进度条并在算法进展时更新它。我已经能够使用这个链接制作一个基本的进度条, 并实现了自我更新: Python pyqt pulsing progress bar with multithreading
问题是,我的算法需要做同样的事情,但这个算法有不同的函数,不能写在QThread的run
函数内部。
这是我的QThread类的代码(与上述链接中给出的代码相同):
class External(QThread):
countChanged = pyqtSignal(int)
def run(self):
count = 0
while count < 100:
count += 1
time.sleep(1)
self.countChanged.emit(count)
这是我的进度条代码:
def generate_timetable(self):
self.calc = External()
self.calc.countChanged.connect(self.onCountChanged)
self.calc.start()
def onCountChanged(self, value):
self.ui.progressBar.setValue(value)
现在,这是我的算法函数的伪代码(这个函数基本上将替换time.sleep(1)
函数)
def algorithm():
fh = False
best_solution = None
count = 1
best_fitness = 100000 # any huge number
while fh is False:
fh = True
solution, solution_fitness = another_function()
if solution_fitness < best_fitness:
best_solution = solution
best_fitness = solution_fitness
fh = False
print("ITERATION #", count, " is OVER!")
print("Best Solution FItness: ", best_fitness)
count += 1
return best_solution, best_fitness
我需要做的是在每次迭代后,我的线程类(Thread class)发出一个信号,并将最佳解决方案的适应度值打印在主GUI上(我有一个标签用于显示此信息),同时更新进度条的值(假设我只想更新一次计数,就像当前程序所做的那样)。
然而问题在于,如果我在一次迭代之后返回适应度值,我的算法将需要重新启动,因此我将失去进展。但是如果不从函数中返回值,我不知道如何确定一次迭代是否结束,以便发出信号、更新进度条值并将标签值设置为迭代后计算得到的适应度值。
有人可以指导我吗?或者展示给我任何具有类似功能的项目。