我有一个应用程序,希望实现以下功能:
- 优化问题
- 等待一段时间,比如一分钟
- 测量某个属性
- 重复执行步骤二和三多次
- 重新开始从1)开始
我希望在单击QPushButton时启动整个过程。需要确保当步骤1)完全终止后才开始步骤2)。由于我不知道优化过程需要多长时间,因此不能只使用QTimer.sleep()。
我通过以下方式解决了这个问题:
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QApplication, QDialog
from PyQt5 import QtWidgets
import sys
class MyForm():
def __init__(self):
self.ui = QDialog()
self.button = QtWidgets.QPushButton(self.ui)
self.button.clicked.connect(self.start_timer)
self.waiting_interval = 10000
self.ui.show()
def start_timer(self):
self.optimize()
self.counter = 0
self.timer = QTimer()
self.timer.timeout.connect(self.tick)
self.timer.setSingleShot(True)
self.timer.start(self.waiting_interval)
def tick(self):
self.timer = QTimer()
if self.counter == 9:
self.timer.timeout.connect(self.start_timer)
else:
self.measure_property()
self.timer.timeout.connect(self.tick)
self.timer.setSingleShot(True)
self.timer.start(self.waiting_interval)
self.counter += 1
def optimize(self):
pass
def measure_property(self):
pass
if __name__ == '__main__':
app = QApplication(sys.argv)
w=MyForm()
app.exec_()
它能够产生我想要的结果,但是我正在寻找一种更智能的方法来实现这一点,也许可以使用信号和槽。任何帮助都将不胜感激!