An interactive GUI for WhiteboxTools in a Jupyter-based environment
npx @tessl/cli install tessl/pypi-whiteboxgui@2.3.0An interactive Graphical User Interface (GUI) for WhiteboxTools in a Jupyter-based environment. This package serves as a Python frontend that enables users to access WhiteboxTools' extensive suite of 518+ geospatial analysis tools through an intuitive interface, providing widgets and controls for parameter input, tool selection through a hierarchical tree structure, and seamless integration with Jupyter notebooks and JupyterLab environments.
pip install whiteboxgui or conda install whiteboxgui -c conda-forgeimport whiteboxguiimport whiteboxgui
# Show the main WhiteboxTools GUI interface
gui = whiteboxgui.show()
# Show with custom parameters
gui = whiteboxgui.show(
verbose=True, # Show progress info when tools run
tree=False, # Use list-based interface (True for tree-based)
reset=False, # Regenerate tool dictionary
sandbox_path=None # Path to sandbox directory for file operations
)
# Update the package from GitHub
whiteboxgui.update_package()whiteboxgui provides a Jupyter-based GUI wrapper around WhiteboxTools with the following key components:
The package integrates with ipywidgets for UI components, ipytree for hierarchical tool browsing, and ipyfilechooser for file selection, providing a complete geospatial analysis environment within Jupyter.
Display the interactive WhiteboxTools GUI with customizable options for tool browsing and execution.
def show(verbose=True, tree=False, reset=False, sandbox_path=None):
"""
Show the toolbox GUI.
Parameters:
- verbose (bool): Whether to show progress info when tools run. Defaults to True.
- tree (bool): Whether to use tree mode toolbox built using ipytree rather than ipywidgets. Defaults to False.
- reset (bool): Whether to regenerate the json file with tool dictionary. Defaults to False.
- sandbox_path (str): The path to the sandbox directory. Defaults to None.
Returns:
A toolbox GUI widget (ipywidget object)
"""Update the whiteboxgui package directly from the GitHub repository without using pip or conda.
def update_package():
"""
Updates the whiteboxgui package from the GitHub repository without the need to use pip or conda.
In this way, I don't have to keep updating pypi and conda-forge with every minor update of the package.
"""Convert between different string case formats used by WhiteboxTools.
def to_camelcase(name):
"""
Convert snake_case name to CamelCase name.
Parameters:
- name (str): The name of the tool.
Returns:
str: The CamelCase name of the tool.
"""
def to_label(name):
"""
Convert snake_case name to Title case label.
Parameters:
- name (str): The name of the tool.
Returns:
str: The Title case name of the tool.
"""
def to_snakecase(name):
"""
Convert CamelCase name to snake_case name.
Parameters:
- name (str): The name of the tool.
Returns:
str: The snakecase name of the tool.
"""Create and manipulate code cells within Jupyter notebooks.
def create_code_cell(code="", where="below"):
"""
Creates a code cell in the IPython Notebook.
Parameters:
- code (str): Code to fill the new code cell with. Defaults to ''.
- where (str): Where to add the new code cell. Can be 'above', 'below', or 'at_bottom'. Defaults to 'below'.
"""Download and extract files from URLs with support for various archive formats.
def download_from_url(url, out_file_name=None, out_dir=".", unzip=True, verbose=False):
"""
Download a file from a URL (e.g., https://github.com/giswqs/whitebox/raw/master/examples/testdata.zip)
Parameters:
- url (str): The HTTP URL to download.
- out_file_name (str): The output file name to use. Defaults to None.
- out_dir (str): The output directory to use. Defaults to '.'.
- unzip (bool): Whether to unzip the downloaded file if it is a zip file. Defaults to True.
- verbose (bool): Whether to display or not the output of the function. Defaults to False.
"""
def clone_repo(out_dir=".", unzip=True):
"""
Clones the whiteboxgui GitHub repository.
Parameters:
- out_dir (str): Output folder for the repo. Defaults to '.'.
- unzip (bool): Whether to unzip the repository. Defaults to True.
"""Access metadata and documentation for WhiteboxTools.
def get_github_url(tool_name):
"""
Get the link to the source code of the tool on GitHub.
Parameters:
- tool_name (str): The name of the tool.
Returns:
str: The URL to source code.
"""
def get_book_url(tool_name, category):
"""
Get the link to the help documentation of the tool.
Parameters:
- tool_name (str): The name of the tool.
- category (str): The category of the tool.
Returns:
str: The URL to help documentation.
"""
def search_api_tree(keywords, api_tree, tools_dict):
"""
Search the WhiteboxTools API and return functions containing the specified keywords
Parameters:
- keywords (str): The keywords to search for.
- api_tree (dict): The dictionary containing the WhiteboxTools API tree.
- tools_dict (dict): The dictionary containing the dict of all tools.
Returns:
An ipytree object/widget.
"""
def tool_categories():
"""
Generate a dictionary containing the toolbox corresponds to each tool.
Returns:
dict: a dictionary containing the toolbox corresponds to each tool.
"""Retrieve detailed tool information and parameters for GUI generation.
def get_tool_params(tool_name):
"""
Get parameters for a tool.
Parameters:
- tool_name (str): The name of the tool.
Returns:
dict: The tool parameters as a dictionary.
"""
def get_ext_dict(verbose=True, reset=False):
"""
Generate a dictionary containing information for the general extension tools.
Parameters:
- verbose (bool): Whether to print out description info. Defaults to True.
- reset (bool): Whether to recreate the json file containing the dictionary. Defaults to False.
Returns:
dict: The dictionary containing information for general extension tools.
"""
def get_wbt_dict(reset=False):
"""
Generate a dictionary containing information for all tools.
Parameters:
- reset (bool): Whether to recreate the json file containing the dictionary. Defaults to False.
Returns:
dict: The dictionary containing information for all tools.
"""Build interactive GUI components for tool selection and parameter input.
def tool_gui(tool_dict, max_width="420px", max_height="600px", sandbox_path=None):
"""
Create a GUI for a tool based on the tool dictionary.
Parameters:
- tool_dict (dict): The dictionary containing the tool info.
- max_width (str): The max width of the tool dialog.
- max_height (str): The max height of the tool dialog.
- sandbox_path (str): The path to the sandbox directory. Defaults to None.
Returns:
An ipywidget object representing the tool interface.
"""
def build_toolbox_tree(tools_dict, folder_icon="folder", tool_icon="wrench", sandbox_path=None):
"""
Build the toolbox for WhiteboxTools using tree-based interface.
Parameters:
- tools_dict (dict): A dictionary containing information for all tools.
- folder_icon (str): The font-awesome icon for tool categories. Defaults to "folder".
- tool_icon (str): The font-awesome icon for tools. Defaults to "wrench".
- sandbox_path (str): The path to the sandbox folder. Defaults to None.
Returns:
An ipywidget representing the toolbox.
"""
def build_toolbox(tools_dict, max_width="1080px", max_height="600px", sandbox_path=None):
"""
Build the toolbox for WhiteboxTools using list-based interface.
Parameters:
- tools_dict (dict): A dictionary containing information for all tools.
- max_width (str): The maximum width of the widget.
- max_height (str): The maximum height of the widget.
- sandbox_path (str): The path to the sandbox folder. Defaults to None.
Returns:
An ipywidget representing the toolbox.
"""Detect execution environment for platform-specific functionality.
def in_colab_shell():
"""
Tests if the code is being executed within Google Colab.
Returns:
bool: True if in Google Colab, False otherwise.
"""# WhiteboxTools instance for tool execution
wbt = whitebox.WhiteboxTools()
# Package metadata constants
__author__ = "Qiusheng Wu"
__email__ = "giswqs@gmail.com"
__version__ = "2.3.0"import whiteboxgui
# Get the complete tool dictionary
tools_dict = whiteboxgui.get_wbt_dict()
# Create GUI for a specific tool
tool_name = "Slope" # Example tool
if tool_name in tools_dict:
tool_interface = whiteboxgui.tool_gui(
tools_dict[tool_name],
max_width="500px",
max_height="700px"
)
# Display the interface in Jupyter
display(tool_interface)import whiteboxgui
# Get all tools
tools_dict = whiteboxgui.get_wbt_dict()
# Search for hydrology-related tools
hydrology_tools = {}
for tool_name, tool_info in tools_dict.items():
if "hydro" in tool_info["description"].lower():
hydrology_tools[tool_name] = tool_info
print(f"Found {len(hydrology_tools)} hydrology tools")import whiteboxgui
# Get full tool dictionary
all_tools = whiteboxgui.get_wbt_dict()
# Filter to specific category
terrain_tools = {
name: info for name, info in all_tools.items()
if info["category"] == "Terrain Analysis"
}
# Build custom toolbox
custom_toolbox = whiteboxgui.build_toolbox(
terrain_tools,
max_width="800px",
max_height="500px"
)
display(custom_toolbox)The package handles various error conditions:
Common error patterns:
try:
gui = whiteboxgui.show()
except Exception as e:
print(f"Failed to initialize GUI: {e}")
# Fallback to updating package or checking dependencies