Ui
Fonctions utilitaires génériques pour la construction d’interfaces utilisateur Qt et l’affichage console coloré.
- Ce module regroupe :
des helpers pour créer et configurer rapidement des layouts Qt cohérents (onglets, groupes, formulaires, séparateurs, spinbox, etc.) ;
des fonctions de synchronisation de widgets (callbacks) ;
des fonctions d’affichage console coloré (erreurs, warnings, succès) ;
quelques utilitaires généraux liés à l’IHM.
- L’objectif est d’assurer :
une ergonomie homogène sur l’ensemble des interfaces ;
une réduction du boilerplate Qt ;
une meilleure lisibilité et maintenabilité du code UI.
- add_setting_row(form: QFormLayout, label: str, widget: QWidget, space: int = 0, margin: int = 0, *, tooltip: str = '')[source]
Ajoute une ligne de paramètre dans un
QFormLayout.Le champ (colonne de droite) est encapsulé dans un
QHBoxLayoutcontenant le widget puis unstretch. Cela évite que le widget s’étire horizontalement jusqu’au bord droit de l’onglet : il conserve sa taille naturelle (sizeHint) et l’espace restant est laissé vide à droite.- Paramètres:
form (QFormLayout) – Formulaire cible à modifier (modification in-place via
addRow()).label (str) – Texte du label (colonne de gauche).
widget (QWidget) – Widget à placer dans la colonne de droite (spinbox, checkbox, combobox, …).
space (int) – Valeur (en pixels) utilisée pour l’espacement du layout. Par défaut :
0.margin (int) – Valeur (en pixels) utilisée pour les marges du layout. Par défaut :
0.tooltip (str) – Tooltip à ajouter (si non vide).
- init_layout(layout: QLayout, space: int = 5, margin: int = 5)[source]
Configure un layout avec des marges et un espacement uniformes.
Cette fonction applique des marges identiques sur les 4 côtés et un espacement identique entre widgets / sous-layouts.
- Paramètres:
layout (QLayout) – Layout à configurer (ex:
QVBoxLayout,QGridLayout, etc.).space (int) – Valeur (en pixels) utilisée pour l’espacement du layout. Par défaut :
COMMON_SPACE.margin (int) – Valeur (en pixels) utilisée pour les marges du layout. Par défaut :
COMMON_SPACE.
- make_tab(parent: QWidget | None = None, space: int = 5, margin: int = 5) tuple[QWidget, QVBoxLayout][source]
Crée un onglet prêt à l’emploi (widget conteneur + layout vertical).
L’onglet est représenté par un
QWidgetet contient unQVBoxLayoutconfiguré avec des marges et un espacement uniformes.- Paramètres:
- Renvoie:
Un tuple
(tab, layout)oùtabest le widget de l’onglet etlayoutson calque.- Type renvoyé:
tuple[QWidget, QVBoxLayout]
- make_group(parent: QWidget | None = None, name: str = '', space: int = 5, margin: int = 5) tuple[QGroupBox, QVBoxLayout][source]
Crée un
QGroupBoxavec un layout vertical configuré.- Paramètres:
parent (QWidget | None) – Parent Qt du group box (peut-être
Nonesi définie plus tard).name (str) – Titre affiché dans l’entête du group box.
space (int) – Valeur (en pixels) utilisée pour l’espacement du layout. Par défaut :
COMMON_SPACE.margin (int) – Valeur (en pixels) utilisée pour les marges du layout. Par défaut :
COMMON_SPACE.
- Renvoie:
Un tuple
(group, layout)où :groupest leQGroupBoxcréé etlayoutson calque.- Type renvoyé:
tuple[QGroupBox, QVBoxLayout]
- make_exclusive_btn_group(labels: list[str], space: int = 5) tuple[QHBoxLayout, QButtonGroup, dict[str, QPushButton]][source]
Crée un
QGroupBoxavec un layout vertical configuré.- Paramètres:
- Renvoie:
Un tuple
(group, layout)où :groupest leQGroupBoxcréé etlayoutson calque.- Type renvoyé:
- make_form(parent: QWidget | None = None, space: int = 5, margin: int = 5) QFormLayout[source]
Crée et configure un
QFormLayoutpour des paramètres.- Configuration appliquée :
labels alignés à droite et centrés verticalement ;
formulaire ancré en haut à gauche ;
espacements horizontaux/verticaux adaptés à une UI de réglages ;
politique de croissance des champs : les widgets de droite restent à leur sizeHint (évite qu’ils s’étirent jusqu’au bord droit).
- Paramètres:
- Renvoie:
Le
QFormLayoutconfiguré.- Type renvoyé:
QFormLayout
- make_info_grid(elements: dict[str, dict[str, QLabel | str]], title: str, size: int = 2, parent: QWidget | None = None, space: int = 5, margin: int = 5) QGridLayout[source]
Construit une colonne d’informations structurée sous forme de
QGridLayout.La grille est composée de : un titre de section (ligne 0), un séparateur horizontal, plusieurs lignes
label / value(et éventuellementunit).La colonne
valueest extensible afin de conserver un alignement propre, tandis que les labels et unités gardent leur taille naturelle.- Paramètres:
elements (dict[str, dict[str, QLabel | str]]) –
Dictionnaire décrivant les lignes à afficher. Chaque entrée doit contenir :
title (str) – Titre de la colonne affichée en haut de la grille.
size (int) – Nombre de colonnes :
2→label | value,3→label | value | unit.parent (QWidget | None) – Parent Qt du layout (optionnel).
space (int) – Espacement interne entre les éléments (en pixels).
margin (int) – Marges du layout (en pixels).
- Renvoie:
Le
QGridLayoutconfiguré.- Type renvoyé:
QGridLayout
- make_file_info_group(space: int = 5, margin: int = 5) tuple[QGroupBox, dict[str, QLabel]][source]
Construit un groupe d’information pour le listing des fichiers calculés.
Le groupe est composée de : un titre, la liste des fichiers et leurs status. :return: Le
QGroupBoxconfiguré ainsi que le lien vers les QLabel de status des fichiers.
- make_path_label(value: str = '', parent: QWidget | None = None) QLabel[source]
Crée un
QLabelstylisé pour afficher un chemin ou un nom de fichier.Le label utilise un style visuel discret (texte grisé et italique), adapté à l’affichage d’informations secondaires.
- update_path_label(lbl: QLabel, path: str | Path)[source]
Mets à jour un label de chemin avec un nouvel objet
pathlib.Path.Le texte visible correspond uniquement au
namedu fichier/dossier, le chemin complet est placé dans le tooltip.
- make_vertical_separator(color: str = '#B0B0B0') QFrame[source]
Crée un séparateur vertical discret.
- make_horizontal_separator(color: str = '#B0B0B0') QFrame[source]
Crée un séparateur horizontal discret.
- make_spin(parent: QWidget | None = None, minimum: int | float = 0, maximum: int | float = 1, step: int | float = 1, value: int | float = 0, decimals: int = 0, buttons: bool = True) QSpinBox | QDoubleSpinBox[source]
Crée une
QSpinBoxouQDoubleSpinBoxconfigurée de manière compacte.Le type de spinbox est choisi automatiquement :
QSpinBoxsidecimals ≤ 0,QDoubleSpinBoxsinon.- Configuration appliquée :
suppression des marges et paddings inutiles ;
alignement centré du texte ;
largeur ajustée dynamiquement en fonction du range et du nombre de décimales ;
possibilité de masquer les boutons d’incrément.
- Paramètres:
- Renvoie:
La spinbox configurée (
QSpinBoxouQDoubleSpinBox).- Type renvoyé:
QSpinBox | QDoubleSpinBox
- set_spin_width(spin: QSpinBox | QDoubleSpinBox)[source]
Ajuste la largeur fixe d’une spinbox en fonction du contenu affichable.
La largeur est estimée à partir du nombre maximal de caractères nécessaires (valeur max, signe, décimales) et de la métrique de police du widget. Cela permet d’éviter les widgets trop larges et de garantir que toutes les valeurs restent visibles sans troncature.
- Paramètres:
spin (QSpinBox | QDoubleSpinBox) – Spinbox à ajuster.
- sync_spin(target: QDoubleSpinBox | QSpinBox, value: float | int)[source]
Synchronise une spinbox avec la valeur envoyée (par signal).
On bloque les signaux le temps de la mise à jour pour éviter les appels en série.
Exemple d’utilisation
spin_1.valueChanged.connect(lambda v: sync_spin(spin_2, v)) spin_2.valueChanged.connect(lambda v: sync_spin(spin_1, v))
- update_spin_limits(spin: QDoubleSpinBox | QSpinBox, minimum: float | int | None = None, maximum: float | int | None = None)[source]
Mets à jour dynamiquement les bornes d’une spinbox.
Les bornes non spécifiées conservent leur valeur actuelle.
Note
Qt ajuste automatiquement la valeur courante si elle sort du nouvel intervalle.
- print_error(msg: str)[source]
Affiche un message avec une couleur rouge
- Paramètres:
msg (str) – Message à afficher
- print_warning(msg: str)[source]
Affiche un message avec une couleur jaune
- Paramètres:
msg (str) – Message à afficher