Progress
The Progress API in Anchorpoint provides functionality to display progress indicators and status updates during long-running operations. Progress dialogs help users understand that operations are running and provide feedback on completion status.
Usage
The Progress class is used to show progress dialogs and status updates to users during operations. You create a Progress instance and use its methods to update the display.
import anchorpoint
# Create a progress dialog
progress = anchorpoint.Progress(
title="Processing Files",
text="Please wait while files are being processed...",
infinite=False,
cancelable=True
)
# Report progress percentage
progress.report_progress(0.5) # 50% complete
progress.set_text("Processing files...")
# Check if user canceled
if progress.canceled:
print("Operation was canceled")
Progress Class
Constructor
-
anchorpoint.Progress(title, text=None, infinite=True, cancelable=False, show_loading_screen=False, delay=None)Creates a Progress object that starts spinning in the Anchorpoint UI. When creating a Progress object a spinning indicator is shown to the user indicating that something is being processed.Arguments
title(str): Title text displayed in the progress dialogtext(str, optional): Additional descriptive text shown below the titleinfinite(bool, optional): If True, shows an infinite progress bar; if False, shows determinate progress (default: True)cancelable(bool, optional): Whether users can cancel the operation (default: False)show_loading_screen(bool, optional): Whether to show a loading screen overlay (default: False)delay(float, optional): Delay in seconds before showing the progress indicator (default: None)
Methods
-
finish()Explicitly finishes the progress indicator. -
report_progress(percentage)Reports progress to the users by showing a loading bar. Only works ifinfinite=False.Arguments
percentage(float): Percentage from 0.0 to 1.0
-
set_cancelable(cancelable)Changes if the progress indicator is cancelable.Arguments
cancelable(bool): Whether to allow cancellation
-
set_text(text)Updates the text in the progress indicator.Arguments
text(str): The text to set
-
stop_progress()Falls back to a spinning progress indicator.
Properties
canceled (bool)
- True if the user has canceled the action
- Can be polled when doing a long running async job to check for user cancellation
- Returns False if the operation is still running normally
Examples
Simple Spinning Progress
import anchorpoint
# Create a simple infinite spinning progress indicator
progress = anchorpoint.Progress("My Action", "Rendering the scene")
# Do some work...
import time
time.sleep(2)
# Explicitly finish the progress
progress.finish()
Determinate Progress with Percentage
import anchorpoint
# Create progress with percentage reporting
progress = anchorpoint.Progress("My Action", "Rendering the scene", infinite=False)
# Report 50% progress
progress.report_progress(0.5)
# Update the text
progress.set_text("Almost done...")
# Report completion
progress.report_progress(1.0)
Cancelable Progress
import anchorpoint
import time
# Create cancelable progress
progress = anchorpoint.Progress("Long Operation", "Processing data...", cancelable=True)
# Simulate long operation with cancellation check
for i in range(100):
if progress.canceled:
print("Operation was canceled by user")
break
# Do some work
time.sleep(0.1)
# Update progress if using determinate mode
if not progress.infinite:
progress.report_progress(i / 100.0)
progress.finish()
Basic Progress Reporting
import anchorpoint
import time
def process_files(files, progress):
"""Process a list of files with progress updates"""
total_files = len(files)
for i, file_path in enumerate(files):
# Update progress percentage
percentage = i / total_files
progress.report_progress(percentage)
progress.set_text(f"Processing: {file_path}")
# Check for cancellation
if progress.canceled:
print(f"Processing canceled at file {i}")
return False
# Simulate file processing
print(f"Processing {file_path}")
time.sleep(0.5)
# Final update
progress.report_progress(1.0)
progress.set_text("Processing complete")
return True
ctx = anchorpoint.get_context()
# Create progress object
progress = anchorpoint.Progress("Processing Files", "Processing selected files...", infinite=False, cancelable=True)
# Process selected files
if ctx.selected_files:
result = ctx.run_async(process_files, ctx.selected_files, progress)
if result:
print("All files processed successfully")
else:
print("Processing was interrupted")