У меня есть приложение, в котором я хотел бы сделать следующее:
- оптимизировать проблему
- ждать определенное количество времени, например одну минуту
- измерение определенного свойства
- повторите шаги два и три несколько раз
- начните снова с 1.)
Я хочу начать весь процесс при нажатиина кнопке QPushButton.Необходимо, чтобы этап 2.) начинался только тогда, когда этап 1.) полностью завершен.Я не знаю, сколько времени занимает процесс оптимизации, поэтому я не могу просто использовать 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_()
Это дает результаты, которыеЯ хочу, но я ищу более разумный способ сделать это, возможно, используя сигналы и слоты.Любая помощь будет оценена!