Note
Go to the end to download the full example code.
12.1.10.8.5. Algorithm cancel and progress widget#
This script shows how the itom.progressObserver
is used
to observe and report the progress of functions.
from itomUi import (
ItomUi,
) # import the base class ItomUi from the module itomUi in the itom-packages subfolder
from itom import ui
from itom import uiItem
from itom import progressObserver
from contextlib import contextmanager
from typing import Dict
class AlgoCancelAndProgressWidget(ItomUi):
def __init__(self): # constructor
# call constructor of ItomUi like it would be the constructor of the class itom.ui:
ItomUi.__init__(self, "algoCancelAndProgressWidget.ui", ui.TYPEWINDOW)
self.observer = progressObserver(
progressBar=self.gui.progressBar,
label=self.gui.lblProgress,
progressMinimum=0,
progressMaximum=100,
)
self.gui.btnCancel["visible"] = False
self.gui.lblProgress["visible"] = False
self.gui.progressBar["visible"] = False
self.gui.btnCancel.invokeProgressObserverCancellation(
"clicked()", self.observer
)
@ItomUi.autoslot("")
def on_btnStart_clicked(self):
with self.disableGui(
{
self.gui.btnStart: False,
self.gui.btnCancel: True,
self.gui.lblProgress: True,
self.gui.progressBar: True,
}
):
# the following filter must have the ability to provide status information (see information of filter)
filter("demoCancellationFunction", _observer=self.observer)
@contextmanager
def disableGui(self, widgets: Dict[uiItem, bool]):
"""this is a smart helper method that can be used in a with context.
It changes the visible property when entering the with context for
all given uiItems to the given boolean value, then executes the content
of the with statement, and finally switches the visible properties back
to the origin.The switch back is executed even if an exception (cancellation
of the algorithm etc.) occurred.
"""
for w in widgets:
w["visible"] = widgets[w]
try:
yield
finally:
for w in widgets:
w["visible"] = not widgets[w]
# create a first instance of AlgoCancelAndProgressWidget and the gui
win1 = AlgoCancelAndProgressWidget()
win1.gui.show() # show the gui
Total running time of the script: (0 minutes 0.044 seconds)