Add rudimentary time left display
This commit is contained in:
parent
748f383dee
commit
77054a676c
@ -21,6 +21,8 @@ from .widgets.led_script import LedScriptViewer
|
|||||||
import logging
|
import logging
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
import time
|
||||||
|
|
||||||
import multiprocessing as mp
|
import multiprocessing as mp
|
||||||
import threading as mt
|
import threading as mt
|
||||||
|
|
||||||
@ -82,7 +84,7 @@ class MainWindow(QMainWindow):
|
|||||||
# Right: Tabs: Script, Plot
|
# Right: Tabs: Script, Plot
|
||||||
self.w_right_tab = QTabWidget()
|
self.w_right_tab = QTabWidget()
|
||||||
layout.addWidget(self.w_right_tab)
|
layout.addWidget(self.w_right_tab)
|
||||||
max_data_points = AppConfig.MAIN_CFG.get_or("plot_max_data_points", 3000)
|
max_data_points = AppConfig.MAIN_CFG.get_or("plot_max_data_points", 40000)
|
||||||
self.w_plot = Plot(max_data_points=max_data_points)
|
self.w_plot = Plot(max_data_points=max_data_points)
|
||||||
self.w_right_tab.addTab(self.w_plot, "Plot")
|
self.w_right_tab.addTab(self.w_plot, "Plot")
|
||||||
|
|
||||||
@ -251,6 +253,8 @@ class MainWindow(QMainWindow):
|
|||||||
|
|
||||||
log.info(f"Starting measurement with:\n\tinterval = {interval}\n\tflush_after = {flush_after}\n\tuse_buffer = {use_buffer}\n\tmax_measurements = {max_measurements}\n\tstop_on_script_end = {stop_on_script_end}")
|
log.info(f"Starting measurement with:\n\tinterval = {interval}\n\tflush_after = {flush_after}\n\tuse_buffer = {use_buffer}\n\tmax_measurements = {max_measurements}\n\tstop_on_script_end = {stop_on_script_end}")
|
||||||
|
|
||||||
|
self.w_led_script.w_time_left.set_end_time(time.time() + led_script.script["dtsum"][-1])
|
||||||
|
|
||||||
self.led_script = LedScript(script=script, auto_update=True, verbose=True)
|
self.led_script = LedScript(script=script, auto_update=True, verbose=True)
|
||||||
self.data_collector = DataCollector(metadata=metadata, data_path=AppConfig.MAIN_CFG.get("datadir"), data_name=measurement_name)
|
self.data_collector = DataCollector(metadata=metadata, data_path=AppConfig.MAIN_CFG.get("datadir"), data_name=measurement_name)
|
||||||
# data_collector.clear()
|
# data_collector.clear()
|
||||||
@ -297,6 +301,8 @@ class MainWindow(QMainWindow):
|
|||||||
self.topbar.disable_button("meas_stop")
|
self.topbar.disable_button("meas_stop")
|
||||||
|
|
||||||
def measure_update(self):
|
def measure_update(self):
|
||||||
|
import time
|
||||||
|
self.w_led_script.update_time(time.time())
|
||||||
if self.proc_measure.is_alive():
|
if self.proc_measure.is_alive():
|
||||||
while not self.data_queue.empty():
|
while not self.data_queue.empty():
|
||||||
# print(data_queue.qsize(), "\n\n")
|
# print(data_queue.qsize(), "\n\n")
|
||||||
|
@ -4,6 +4,56 @@ from PyQt6.QtCore import QAbstractTableModel, QModelIndex, Qt
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
from cpdctrl.led_script import LedScript
|
from cpdctrl.led_script import LedScript
|
||||||
|
|
||||||
|
import time
|
||||||
|
import datetime
|
||||||
|
class TimeLeft(QWidget):
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
self.t_end = None
|
||||||
|
self.setLayout(QVBoxLayout())
|
||||||
|
self.layout().addWidget(QLabel("Time left"))
|
||||||
|
self.w_time_left = QLabel("N.A.")
|
||||||
|
self.layout().addWidget(self.w_time_left)
|
||||||
|
self.w_end_time = QLabel("N.A.")
|
||||||
|
self.layout().addWidget(self.w_end_time)
|
||||||
|
|
||||||
|
def set_end_time(self, t_end: float):
|
||||||
|
"""
|
||||||
|
Set the end time
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
t_end
|
||||||
|
The end time in seconds since epoch
|
||||||
|
"""
|
||||||
|
self.t_end = t_end
|
||||||
|
self.w_end_time.setText(
|
||||||
|
datetime.datetime.fromtimestamp(t_end).strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
)
|
||||||
|
|
||||||
|
def update_time(self, t_now: float):
|
||||||
|
"""
|
||||||
|
Update the time left display
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
t_now
|
||||||
|
The current time in seconds since epoch
|
||||||
|
"""
|
||||||
|
if self.t_end is None: raise RuntimeError("Update called before end time was set")
|
||||||
|
# convert to format <days>d, <hours>h, <minutes>m, <seconds>s
|
||||||
|
print(self.t_end, t_now, self.t_end - t_now)
|
||||||
|
sign = 1 if self.t_end > t_now else -1
|
||||||
|
time_left = abs(int(self.t_end - t_now))
|
||||||
|
days = sign * int(time_left / (24 * 3600))
|
||||||
|
time_left %= (24 * 3600)
|
||||||
|
hours = sign * int(time_left / 3600)
|
||||||
|
time_left %= 3600
|
||||||
|
minutes = sign * int(time_left / 60)
|
||||||
|
time_left %= 60
|
||||||
|
seconds = sign * int(time_left)
|
||||||
|
self.w_time_left.setText(f"{days}d, {hours:02}h, {minutes:02}m, {seconds:02}s")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class LedScriptTableModel(QAbstractTableModel):
|
class LedScriptTableModel(QAbstractTableModel):
|
||||||
"""
|
"""
|
||||||
A table model for the led script.
|
A table model for the led script.
|
||||||
@ -84,6 +134,9 @@ class LedScriptViewer(QWidget):
|
|||||||
|
|
||||||
self.w_scroll.setWidgetResizable(True)
|
self.w_scroll.setWidgetResizable(True)
|
||||||
self.w_scroll.setFixedHeight(200)
|
self.w_scroll.setFixedHeight(200)
|
||||||
|
|
||||||
|
self.w_time_left = TimeLeft(self)
|
||||||
|
self.l_vbox.addWidget(self.w_time_left)
|
||||||
self.l_vbox.addStretch(1)
|
self.l_vbox.addStretch(1)
|
||||||
|
|
||||||
def set_script(self, led_script: LedScript):
|
def set_script(self, led_script: LedScript):
|
||||||
@ -91,5 +144,10 @@ class LedScriptViewer(QWidget):
|
|||||||
self.w_table.setModel(self.model)
|
self.w_table.setModel(self.model)
|
||||||
self.w_table.show()
|
self.w_table.show()
|
||||||
|
|
||||||
def set_relative_time(self, time: float):
|
def set_relative_time(self, t: float):
|
||||||
pass
|
pass
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
def update_time(self, t_now: float):
|
||||||
|
self.w_time_left.update_time(t_now)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user