Эта функция занимает от нескольких секунд до нескольких минут< /strong> для обработки отправленных на него данных. Однако я хочу избежать зависания и зависания графического интерфейса во время вычислений.
Итак, я решил использовать QThread, предоставляемый PyQt6, и вот пример части реализованного кода:
Код: Выделить всё
class FCSPostProcessingWorker(QThread):
finished = pyqtSignal(object)
def __init__(self, active_correlations, num_acquisitions):
super().__init__()
self.active_correlations = active_correlations
self.num_acquisitions = num_acquisitions
self.is_running = True
def run(self):
gt_results = fcs_flim.fluorescence_correlation_spectroscopy(
num_acquisitions=self.num_acquisitions,
correlations=self.active_correlations,
)
self.finished.emit(gt_results)
def stop(self):
self.is_running = False
class FCSPostProcessing:
@staticmethod
def get_input(app):
correlations = [tuple(item) if isinstance(item, list) else item for item in app.ch_correlations]
active_correlations = [(ch1, ch2) for ch1, ch2, active in correlations if active]
#num_acquisitions = app.selected_average
num_acquisitions = 3
worker = FCSPostProcessingWorker(active_correlations, num_acquisitions)
QApplication.processEvents()
worker.finished.connect(lambda result: FCSPostProcessing.handle_fcs_post_processing_result(app, result, worker))
worker.start()
@staticmethod
def handle_fcs_post_processing_result(app, gt_results, worker):
worker.stop()
remove_widget(app.layouts[PLOT_GRIDS_CONTAINER], app.widgets[GT_WIDGET_WRAPPER])
gt_widget = create_gt_layout(app)
insert_widget(app.layouts[PLOT_GRIDS_CONTAINER], gt_widget, 1)
gt_plot_to_show = [tuple(item) if isinstance(item, list) else item for item in app.gt_plots_to_show]
lag_index = gt_results[0]
filtered_gt_results = [res for res in gt_results[1] if res[0] in gt_plot_to_show]
for index, res in enumerate(filtered_gt_results):
correlation = res[0]
gt_values = res[1]
FCSPostProcessingPlot.generate_chart(correlation, index, app, lag_index, gt_values)
Подробнее здесь: https://stackoverflow.com/questions/783 ... onal-tasks