Contents Menu Expand Light mode Dark mode Auto light/dark, in light mode Auto light/dark, in dark mode Skip to content
Naturtag 0.9.2 documentation
Logo
  • Installation
  • Application Guide
  • CLI
  • Metadata
  • API Reference
    • naturtag.app package
      • naturtag.app.app module
      • naturtag.app.controls module
      • naturtag.app.settings_menu module
      • naturtag.app.threadpool module
    • naturtag.cli module
    • naturtag.controllers package
      • naturtag.controllers.base_controller module
      • naturtag.controllers.image_controller module
      • naturtag.controllers.image_gallery module
      • naturtag.controllers.observation_controller module
      • naturtag.controllers.observation_search module
      • naturtag.controllers.observation_view module
      • naturtag.controllers.taxon_controller module
      • naturtag.controllers.taxon_search module
      • naturtag.controllers.taxon_view module
    • naturtag.metadata package
      • naturtag.metadata.base module
      • naturtag.metadata.derived module
      • naturtag.metadata.gps module
      • naturtag.metadata.keywords module
      • naturtag.metadata.tagger module
    • naturtag.storage package
      • naturtag.storage.app_state module
      • naturtag.storage.client module
      • naturtag.storage.remote_images module
      • naturtag.storage.settings module
      • naturtag.storage.setup module
    • naturtag.widgets package
      • naturtag.widgets.autocomplete module
      • naturtag.widgets.dialogs module
      • naturtag.widgets.images module
      • naturtag.widgets.inputs module
      • naturtag.widgets.layouts module
      • naturtag.widgets.logger module
      • naturtag.widgets.observation_images module
      • naturtag.widgets.style module
      • naturtag.widgets.taxon_images module
      • naturtag.widgets.toggle_switch module
    • naturtag.utils package
      • naturtag.utils.click_help_colors module
      • naturtag.utils.i18n module
      • naturtag.utils.image_glob module
      • naturtag.utils.parsing module
      • naturtag.utils.thumbnails module
      • naturtag.utils.updates module
  • History
Back to top
View this page

naturtag.controllers.image_gallery module¶

class naturtag.controllers.image_gallery.ImageGallery¶

Bases: BaseController

Container for displaying local image thumbnails & info

clear()¶

Clear all images from the viewer

connect_pending_signal(signal)¶

Connect a signal for pending tag state updates to all current and future thumbnails.

dragEnterEvent(event)¶
dragMoveEvent(event)¶
dropEvent(event)¶
load_file_dialog(start_dir=None)¶

Show a file chooser dialog

load_image(image_path, delayed_load=False)¶

Load an image

Return type:

Optional[ThumbnailCard]

load_images(image_paths)¶

Load multiple images, and ignore any duplicates

on_load_images¶

New images have been loaded

on_view_observation_id¶

An observation was selected from context menu

on_view_taxon_id¶

A taxon was selected from context menu

remove_image(image_path)¶
select_image(image_path)¶
staticMetaObject = PySide6.QtCore.QMetaObject("ImageGallery" inherits "BaseController": Methods:   #34 type=Signal, signature=on_load_images(QVariantList), parameters=QVariantList   #35 type=Signal, signature=on_view_taxon_id(int), parameters=int   #36 type=Signal, signature=on_view_observation_id(int), parameters=int   #37 type=Slot, signature=remove_image(QString), parameters=QString   #38 type=Slot, signature=select_image(QString), parameters=QString )¶
class naturtag.controllers.image_gallery.MetaThumbnail(parent, size=(250, 250))¶

Bases: HoverMixin, PixmapLabel

Thumbnail for a local image plus metadata

get_pixmap_meta(path)¶

All I/O for loading an image preview (reading metadata, generating thumbnail), to be run from a separate thread. Returns QImage (thread-safe) instead of QPixmap.

Return type:

tuple[QImage | None, DerivedMetadata, str | None]

on_load_error¶

Error message when image loading fails

on_load_metadata¶

Finished reading image metadata

set_pixmap_meta(image_meta)¶
set_pixmap_meta_async(threadpool, path=None)¶

Generate a photo thumbnail and read its metadata from a separate thread, and render it in the main thread when complete

staticMetaObject = PySide6.QtCore.QMetaObject("MetaThumbnail" inherits "PixmapLabel": Methods:   #43 type=Signal, signature=on_load_metadata(PyObject), parameters=PyObject   #44 type=Signal, signature=on_load_error(QString), parameters=QString )¶
class naturtag.controllers.image_gallery.ThumbnailCard(image_path, size=(250, 250))¶

Bases: StylableWidget

A card that displays a thumbnail for a local image file, along with a title and icons representing its metadata contents. Also adds the following mouse actions:

  • Left click: Show full image

  • Middle click: Remove image

  • Right click: Show context menu

contextMenuEvent(e)¶
copy_flickr_tags()¶
load_image()¶

Load thumbnail + metadata in the main thread

load_image_async(threadpool)¶

Load thumbnail + metadata in a separate thread

mousePressEvent(_)¶

Placeholder to accept mouse press events

mouseReleaseEvent(event)¶
on_copy¶

Tags were copied to the clipboard

on_load_error¶

Error message when image loading fails

on_loaded¶

Image and metadata have been loaded

on_remove¶

Request for the image to be removed from the gallery

on_select¶

The image was clicked

open_directory()¶
pulse()¶

Show a highlight animation to indicate the image has been updated

remove()¶
select()¶
set_load_error(error)¶

Show error icon on thumbnail when image loading fails.

set_metadata(metadata)¶

Update UI based on new metadata

set_pending(pending)¶

Show or hide the pending tags icon.

set_pending_icons(pending)¶

Switch metadata icons to primary color for each pending type.

staticMetaObject = PySide6.QtCore.QMetaObject("ThumbnailCard" inherits "StylableWidget": Methods:   #33 type=Signal, signature=on_loaded(PyObject), parameters=PyObject   #34 type=Signal, signature=on_copy(QString), parameters=QString   #35 type=Signal, signature=on_load_error(QString), parameters=QString   #36 type=Signal, signature=on_remove(PyObject), parameters=PyObject   #37 type=Signal, signature=on_select(PyObject), parameters=PyObject )¶
update_metadata(metadata)¶

Update UI based on new metadata, and show a highlight animation

class naturtag.controllers.image_gallery.ThumbnailContextMenu¶

Bases: QMenu

Context menu for local image thumbnails

on_view_observation_id¶

An observation was selected from context menu

on_view_taxon_id¶

A taxon was selected from context menu

refresh_actions(thumbnail_card)¶

Update menu actions based on the available metadata

staticMetaObject = PySide6.QtCore.QMetaObject("ThumbnailContextMenu" inherits "QMenu": Methods:   #42 type=Signal, signature=on_view_taxon_id(int), parameters=int   #43 type=Signal, signature=on_view_observation_id(int), parameters=int )¶
class naturtag.controllers.image_gallery.ThumbnailMetaIcons(parent)¶

Bases: QLabel

Icons overlaid on top of a thumbnail to indicate what types of metadata are available

refresh_icons(metadata)¶

Update icons based on the available metadata

set_error(error)¶

Show or hide the error icon, with error message as tooltip.

set_pending(pending)¶

Show or hide the pending tags indicator.

set_pending_icons(pending)¶

Switch icons to primary color for each pending metadata type.

staticMetaObject = PySide6.QtCore.QMetaObject("ThumbnailMetaIcons" inherits "QLabel": )¶
Next
naturtag.controllers.observation_controller module
Previous
naturtag.controllers.image_controller module
Copyright © 2026, Jordan Cook
Made with Furo
On this page
  • naturtag.controllers.image_gallery module
    • ImageGallery
      • ImageGallery.clear()
      • ImageGallery.connect_pending_signal()
      • ImageGallery.dragEnterEvent()
      • ImageGallery.dragMoveEvent()
      • ImageGallery.dropEvent()
      • ImageGallery.load_file_dialog()
      • ImageGallery.load_image()
      • ImageGallery.load_images()
      • ImageGallery.on_load_images
      • ImageGallery.on_view_observation_id
      • ImageGallery.on_view_taxon_id
      • ImageGallery.remove_image()
      • ImageGallery.select_image()
      • ImageGallery.staticMetaObject
    • MetaThumbnail
      • MetaThumbnail.get_pixmap_meta()
      • MetaThumbnail.on_load_error
      • MetaThumbnail.on_load_metadata
      • MetaThumbnail.set_pixmap_meta()
      • MetaThumbnail.set_pixmap_meta_async()
      • MetaThumbnail.staticMetaObject
    • ThumbnailCard
      • ThumbnailCard.contextMenuEvent()
      • ThumbnailCard.copy_flickr_tags()
      • ThumbnailCard.load_image()
      • ThumbnailCard.load_image_async()
      • ThumbnailCard.mousePressEvent()
      • ThumbnailCard.mouseReleaseEvent()
      • ThumbnailCard.on_copy
      • ThumbnailCard.on_load_error
      • ThumbnailCard.on_loaded
      • ThumbnailCard.on_remove
      • ThumbnailCard.on_select
      • ThumbnailCard.open_directory()
      • ThumbnailCard.pulse()
      • ThumbnailCard.remove()
      • ThumbnailCard.select()
      • ThumbnailCard.set_load_error()
      • ThumbnailCard.set_metadata()
      • ThumbnailCard.set_pending()
      • ThumbnailCard.set_pending_icons()
      • ThumbnailCard.staticMetaObject
      • ThumbnailCard.update_metadata()
    • ThumbnailContextMenu
      • ThumbnailContextMenu.on_view_observation_id
      • ThumbnailContextMenu.on_view_taxon_id
      • ThumbnailContextMenu.refresh_actions()
      • ThumbnailContextMenu.staticMetaObject
    • ThumbnailMetaIcons
      • ThumbnailMetaIcons.refresh_icons()
      • ThumbnailMetaIcons.set_error()
      • ThumbnailMetaIcons.set_pending()
      • ThumbnailMetaIcons.set_pending_icons()
      • ThumbnailMetaIcons.staticMetaObject