PBToolboxAI v5 ← Site

chartpie — u_pbt_chartpie #

← Référence des composants · Sommaire du guide

Graphique en secteurs : camembert, anneau ou demi-roue. Chaque angle est une part du tout — la légende masque une part, les autres reprennent sa place.

▶ Le voir en vrai — Application de démonstration, tuile Pie chart : l'aperçu, le code qui le produit et cette page, côte à côte.


En bref #

Userobjectu_pbt_chartpie
Classe d'itemsn_pbt_chartpie_slice (of_item(key))
Sert àMontrer comment un tout se partage — ventes par région, tickets par état, budget consommé
PrincipeVous posez des parts (une clé, un nom, une valeur) ; les angles, les pourcentages, la légende et l'animation sont à nous

Démarrage rapide #

// One slice per region : a key, a label and a value
uo_pie.of_add_slice(/*key*/ "north", /*label*/ "North", /*value*/ 420)
uo_pie.of_add_slice(/*key*/ "south", /*label*/ "South", /*value*/ 310)
uo_pie.of_add_slice(/*key*/ "east", /*label*/ "East", /*value*/ 260)

// The share of each region, written on its slice
uo_pie.ib_data_labels = true
uo_pie.is_label_format = "#percent#"

Une part est une PART du tout #

Vous donnez des valeurs, jamais des angles : le composant fait la somme des parts affichées et donne à chacune l'angle de sa part de cette somme. Masquer une part — d'un clic dans la légende, ou par ib_visible — la referme sur place : les autres se partagent de nouveau la roue, et #percent#, id_percent et of_total() suivent. Une valeur négative n'a pas d'angle : elle est dessinée comme zéro et se relit telle que vous l'avez donnée.

Les angles se comptent en degrés, 0 en haut, dans le sens du dessin : ii_start_angle = -90 et ii_sweep_angle = 180 donnent la moitié supérieure d'un cercle — une jauge. La roue est ajustée à la place que prend cet angle : une demi-roue est dessinée deux fois plus grande.


Propriétés #

PropriétéTypeDéfautRôle
is_titlestring""Titre du graphique, au-dessus de la roue. Balisage accepté
ib_show_legendbooleantrueAffiche la légende. Cliquer une entrée masque sa part et lève ue_slice_toggled
is_legend_locationstringendOù va la légende (constantes LEGEND_*) : à côté de la roue (END, START, en colonne) ou au-dessus et au-dessous (TOP, BOTTOM, côte à côte). START/END sont logiques : ils suivent le sens de lecture. Une position inconnue vaut end, et se relit telle
ib_legend_valuesbooleanfalseÉcrit la valeur et la part de chaque tranche dans la légende, après son nom
ib_value_tooltipbooleantrueLe panneau qui nomme la part sous le pointeur — ou celle du clavier — avec sa valeur et sa part. Ce n'est pas is_tooltip, l'info-bulle du composant entier. L'info-bulle d'une part (son is_tooltip) s'écrit dans ce panneau, même à false
ib_data_labelsbooleanfalseUne étiquette par part, qui dit ce que dit is_label_format, là où la pose is_label_position. Dans une part trop étroite, l'étiquette est omise plutôt qu'écrite sur ses voisines
is_label_formatstring""Ce que dit une étiquette : #value# la valeur, #percent# sa part du tout, #label# son nom (sans balisage), #key# sa clé, #total# le total ; #participation# dit ce que dit #percent#. Le reste est écrit tel quel. Vide = la valeur seule
is_label_positionstringinsideOù vont les étiquettes (constantes LABEL_*) : INSIDE, sur la part, en noir ou en blanc selon ce qui s'y lit ; OUTSIDE, à côté de la roue, reliées à leur part par un trait et écartées pour ne pas se chevaucher
id_inner_radiusdouble0Le trou, en fraction du rayon : 0 un camembert, 0.6 un anneau (borné à 0..0,9). La roue glisse de l'un à l'autre
is_center_textstring""Texte dans le trou d'un anneau, balisage accepté. Jetons : #total# le total des parts affichées (au format des nombres), #count# leur nombre ; #hover_label#, #hover_value#, #hover_percent# la part sous le pointeur ou celle du clavier — au repos, le tout : Total, le total, 100 % ; #percent:key# et #value:key# la part et la valeur d'une part, tenues à jour quelles que soient les valeurs (une jauge écrit elle-même son « 72 % »). Une clé inconnue n'écrit rien. Rien n'est écrit dans un camembert
ii_start_angleinteger0Où commence la première part, en degrés : 0 en haut, 90 à droite, -90 à gauche (450 se relit 90)
ii_sweep_angleinteger360La portion du cercle que se partagent les parts, en degrés (bornée à 10..360). Avec ii_start_angle = -90, 180 dessine la moitié supérieure — une jauge
ib_clockwisebooleantrueLes parts se suivent dans le sens des aiguilles d'une montre, ou dans l'autre. Les flèches du clavier suivent l'ordre du dessin
is_sortstring"none"L'ordre du dessin (constantes SORT_*) : NONE l'ordre où les parts ont été données, DESC la plus grande d'abord, ASC la plus petite d'abord. La roue, la légende et le clavier le suivent ; le modèle garde son ordre — of_get_values, of_count et les couleurs de la palette ne bougent pas. Une valeur inconnue vaut none
id_hover_push_outdouble0.08De combien la part sous le pointeur — ou celle du clavier — ressort, en fraction du rayon (borné à 0..0,4). S'ajoute au id_push_out de la part. 0 = rien ne bouge
ib_track_hoverbooleanfalseAbonnement à ue_slice_hovered : un événement levé à chaque mouvement du pointeur n'est envoyé qu'à une application qui l'a demandé
is_formatstring""Le format de tous les nombres que le graphique écrit — étiquettes, légende, panneau des valeurs, texte central — dans la syntaxe d'un format de DataWindow : #,##0.00, $#,##0, #,##0 "unités", sections positif;négatif;zéro. Les séparateurs sont ceux de la langue d'affichage. Vide (ou un format qui n'est pas numérique) = le nombre tel quel, au millième. Les parts (#percent#) s'écrivent toujours au dixième
id_others_thresholddouble0Rassemble les petites parts : toute part dont la part du tout est sous ce pourcentage rejoint une part « Autres », dessinée en dernier dans un gris neutre — la légende la montre à leur place. Les membres sont jugés sur toutes les parts, affichées ou masquées : masquer une grosse part n'en fait jamais sortir les petites, et la plus grande part n'y entre jamais. Sa clé est OTHERS_KEY ("__others") dans tous les événements, sa valeur est la somme de ses membres affichés, of_others_keys les nomme, of_item(OTHERS_KEY) lit sa valeur et sa part ou la masque. Une petite part seule garde son secteur. 0 = jamais
ii_others_topinteger0Rassemble par nombre : les N plus grandes parts gardent leur secteur, toutes les autres rejoignent « Autres » (deux au moins, comme pour le seuil). S'ajoute à id_others_threshold : une part entre dans « Autres » dès que l'une des deux règles le dit. 0 = pas de telle règle
is_others_labelstring""Le nom de la part « Autres ». Balisage accepté dans la légende et le panneau des valeurs ; les étiquettes et le résumé lu par un lecteur d'écran en écrivent le texte brut. Vide = le mot de la langue d'affichage (Others, Autres…)
ib_auto_heightbooleanfalseLe composant annonce sa hauteur idéale et l'userobject s'y ajuste (ue_auto_height). La largeur la dicte : une demi-roue est moitié moins haute
ib_enabledbooleantrueGrisé, le graphique montre toujours ce qu'il montre mais ne répond plus : ni clic, ni double-clic, ni clavier, ni légende, et il sort de l'ordre de tabulation
ib_animatedbooleantrueLa roue arrive animée — elle s'ouvre depuis son départ, part après part — et de nouvelles valeurs glissent : les bords entre les parts bougent ensemble, la roue ne montre jamais de trou ni une part sur sa voisine ; une part retirée se referme à sa place. Un poste réglé pour réduire les animations n'anime jamais, et la roue arrive au même endroit
ii_anim_durationinteger450Durée de l'arrivée et de chaque mouvement, en millisecondes (bornée à 0..5000)
is_anim_easingstringease-outLa courbe du mouvement (constantes EASING_*, les noms de LiveCharts2) : back-out dépasse puis revient, bounce-out rebondit, elastic-out claque
ii_anim_delayinteger40À l'arrivée seulement (une roue qui n'avait rien à l'écran), le décalage entre deux parts, en millisecondes (0 à 1000) : la roue s'ouvre part après part, jamais plus de 600 ms plus tard en tout, quel que soit le nombre de parts. 0 = toutes ensemble. Un changement de valeurs fait toujours glisser toutes les parts ensemble
is_theme_stylestring""Style visuel du composant (constantes THEME_STYLE_*) ; vide = celui de l'application, suivi à chaque changement
is_theme_modestring""Variante claire ou sombre (constantes THEME_MODE_*) ; vide = celle de l'application, suivie à chaque changement
il_theme_accentlong-1Couleur d'accent de ce composant (-1 = accent du thème)
is_tooltipstring""Info-bulle simple affichée au survol du composant
is_super_tooltip_titlestring""Titre de l'info-bulle enrichie (prend le pas sur is_tooltip)
is_super_tooltip_textstring""Texte de l'info-bulle enrichie (balisage riche accepté)
is_super_tooltip_imagestring""Image de l'info-bulle enrichie

Méthodes #

MéthodeRôle
of_add_slice ( string as_key, string as_label, double ad_value { , long al_color } )Ajoute une part : sa clé, son nom (balisage accepté) et sa valeur ; la surcharge avec une couleur la fixe, sans elle la palette choisit (un jeu pour un thème clair, un pour un thème sombre). Renvoie 0 une fois ajoutée, -5 si la clé est vide, contient / ou `, commence par __ (les clés du graphique lui-même, comme OTHERS_KEY) ou est **déjà prise** (un ajout ne remplace jamais une part), -2` si le composant n'est pas créé
of_clear ( )Retire toutes les parts — leurs poignées partent avec elles — et oublie les lignes de of_from_datastore : un of_map ou un of_reload ultérieur ne les ramène pas. Les réglages restent, les rôles de of_map aussi ; une roue vide est dessinée à leur place. Renvoie 0 une fois vidé, -2 si le composant n'est pas créé
of_from_datastore (datastore ads)Alimente le graphique depuis un DataStore : une ligne = une part. Une colonne joue un rôle quand elle porte son nom (key, label, value, color) ou quand of_map le dit ; il faut une colonne ROLE_VALUE. Sans colonne ROLE_KEY, la clé d'une part est son numéro de ligne ; avec elle, les lignes qui partagent une clé sont additionnées en une seule part (le nom et la couleur de la première) — un an de ventes devient une part par catégorie, sans boucle. Nombres et dates sont lus comme la DataWindow les écrit sur le poste (virgule décimale, dates régionales : une date devient yyyy-mm-dd). Un second chargement met les parts à jour sur place : une clé qui revient garde ce que l'utilisateur et votre code lui ont donné (masquée dans la légende, écartée, une couleur du code, son info-bulle) et sa poignée ; les parts des clés parties s'en vont ; les parts posées à la main restent, après celles des lignes. Renvoie 0 une fois chargé — une ligne dont la clé est vide, contient / ou `, commence par __ ou est tenue par une part posée à la main est écartée, et of_get_last_error dit combien —, -5 si le DataStore n'est pas valide, si aucune colonne ne joue ROLE_VALUE ou si une colonne nommée par of_map n'y est pas (of_get_last_error la nomme), -2` si le composant n'est pas créé
of_from_datastore (datawindow adw)La même chose depuis les lignes d'une DataWindow — celle que l'utilisateur voit à côté du graphique. Ses données sont partagées avec un DataStore de passage : une DataWindow qui ne peut pas les partager est refusée (-5, avec la raison). Renvoie 0 une fois chargé, -5 comme ci-dessus, -2 si le composant n'est pas créé
of_from_datastore (datawindowchild adwc)La même chose depuis les lignes d'un DataWindowChild (une DataWindow déroulante, un rapport imbriqué). Renvoie 0 une fois chargé, -5 comme ci-dessus, -2 si le composant n'est pas créé
of_get_last_error ( )Pourquoi le dernier appel a été refusé (un rôle de of_map que les lignes n'ont pas…), ou combien de lignes le dernier of_from_datastore a écartées et pourquoi ; sinon la dernière erreur de la DLL, comme pour tout composant
of_get_values ( ref string as_keys[], ref double ad_values[] )Remplit les deux tableaux avec les parts que le graphique tient maintenant, dans l'ordre où elles ont été données (is_sort ne change que le dessin), et renvoie leur nombre — ce que lit le graphique, pas ce qui a été envoyé
of_item ( string as_key )La poignée n_pbt_chartpie_slice d'une part, pour lire ou changer son nom, sa valeur, sa couleur, son écart ou sa visibilité. of_item(OTHERS_KEY) est toujours valide : la part « Autres », sa valeur, sa part, sa visibilité (of_has ne la nomme pas : elle est au graphique, pas à vous). Une clé que le graphique ne tient pas donne une poignée qui ne change rien et lit des valeurs vides — une propriété ne peut pas répondre -5 : vérifiez d'abord par of_has une clé venue d'ailleurs
of_map ( string as_role, string as_column )Donne un rôle à une colonne quand son nom ne le dit pas : of_map(ROLE_VALUE, "amount"). Rôles : ROLE_KEY (les lignes d'une même clé sont additionnées), ROLE_LABEL, ROLE_VALUE, ROLE_COLOR (un long RGB() ou #rrggbb). Avant of_from_datastore, ou après : les lignes sont alors relues sur place. La colonne est jugée par le prochain of_from_datastore (-5 là s'il ne l'a pas) ; quand les lignes déjà données ne l'ont pas, elles ne sont pas relues — le rôle attend les lignes que vous allez donner, et of_get_last_error le dit. Une colonne vide rend le rôle à la colonne qui porte son nom. Renvoie 0 une fois posé, -5 si le rôle n'est pas une constante ROLE_, -2 si le composant n'est pas créé
of_others_keys ( ref string as_keys[] )Remplit le tableau avec les clés des parts rassemblées dans « Autres » maintenant (voir id_others_threshold et ii_others_top), dans l'ordre où elles ont été données, et renvoie leur nombre — 0 quand aucune part n'est rassemblée. Ce dont parle un clic sur OTHERS_KEY
of_reload ( )Relit les lignes du dernier of_from_datastore — après un Retrieve, après une saisie — et met les parts à jour sur place, comme un second of_from_datastore. Renvoie 0 une fois relu, -5 si aucune ligne n'a été donnée (ou si of_clear les a oubliées, ou si le DataStore a été détruit), -2 si le composant n'est pas créé
of_remove_slice ( string as_key )Retire une part ; les autres reprennent sa place, sa poignée est détruite. Renvoie 0 une fois retirée, -5 si aucune part n'a cette clé, -2 si le composant n'est pas créé
of_set_values ( string as_keys[], double ad_values[] )De nouvelles valeurs pour plusieurs parts en un appel — ce qu'un tableau de bord appelle à chaque rafraîchissement : les bords entre les parts glissent ensemble vers leurs nouveaux angles, la roue n'ouvre jamais de trou. Renvoie 0 une fois appliqué, -5 si les deux tableaux n'ont pas la même longueur ou si une clé n'est pas tenue (rien n'est alors appliqué), -2 si le composant n'est pas créé
of_total ( )Le total des parts affichées — ce que vaut 100 % maintenant : une part masquée dans la légende ne compte pas, ni une valeur négative
of_reset ( )Vide le graphique — poignées de part comprises — et remet toutes les propriétés à leur valeur d'origine. Renvoie 0 une fois fait, -2 si le composant n'est pas créé

Événements #

ÉvénementDéclenché quand
ue_slice_clicked (string as_key, double ad_value)Une part a été cliquée — ou validée par Entrée ou Espace sur la part du clavier (Tab jusqu'au graphique, puis les flèches) : sa clé et sa valeur — OTHERS_KEY et la somme de ses parts pour la part « Autres ». Le clic est jugé là où la part repose : près du centre, le creux que laisse une part survolée en ressortant est encore le sien. Une part masquée n'a rien à cliquer
ue_slice_dblclicked (string as_key, double ad_value)Double-clic sur une part : sa clé et sa valeur — l'endroit où ouvrir les lignes qui sont derrière (un forage : un second of_from_datastore avec les lignes de cette part). Les deux clics d'avant ont levé ue_slice_clicked, comme dans une DataWindow ; Entrée reste un clic
ue_slice_rclicked (string as_key, long al_x, long al_y)Clic droit sur une part, ou touche Menu (Maj+F10) sur la part du clavier. al_x, al_y : l'endroit, en pixels écran — le pointeur, ou le milieu de la part pour la touche Menu, jamais là où traîne la souris. Un composant contextmenu s'y ouvre : uo_menu.of_show(al_x, al_y)
ue_slice_toggled (string as_key, boolean ab_visible)L'utilisateur a masqué ou remontré une part d'un clic dans la légende (ou d'Entrée / Espace sur son entrée : la légende est un seul arrêt de Tab, les flèches la parcourent). La dernière part peut se masquer aussi : la roue dit alors Toutes les parts sont masquées. Ce que le graphique affiche n'est alors plus ce que l'application a envoyé. Poser ib_visible est une valeur, comme cocher une case : cet événement rapporte le geste de l'utilisateur
ue_slice_hovered (string as_key)Avec ib_track_hover seulement : le pointeur ou le clavier atteint une autre part — sa clé ; une clé vide quand il les quitte toutes : le pointeur hors de la roue, Échap, le focus qui quitte le graphique
ue_auto_height (long al_height)Avec ib_auto_height : l'userobject vient d'être redimensionné à sa hauteur idéale

Propriétés d'item #

Lues et écrites sur la poignée d'une part : uo_pie.of_item(/*key*/ "north").id_value = 450. Chaque lecture interroge le graphique.

PropriétéTypeDéfautRôle
is_labelstring""Le nom de la part, tel que la légende et le panneau le montrent ; vide = sa clé
id_valuedouble0Sa valeur ; son angle est sa part du total, et elle y glisse
il_colorlong-1Sa couleur ; -1 = la couleur de la palette. Les couleurs d'item héritées (il_accent, il_back_color, il_text_color et leurs variantes de survol) n'ont aucun effet sur une part : il_color décide
id_push_outdouble0La sort de la roue pour la mettre en avant, en fraction du rayon (borné à 0..0,4)
ib_visiblebooleantrueMasque la part sans la retirer : les autres se repartagent la roue, la légende garde un chemin de retour
id_percentdouble0Sa part de ce que la roue montre, de 0 à 100 ; 0 quand elle est masquée (lecture seule). Chaque part s'écrit au dixième : trois parts égales lisent 33,3 % chacune, 99,9 % ensemble — les parts ne sont jamais forcées à faire 100
is_tooltipstring""Son info-bulle, écrite dans le panneau qui nomme la part sous le pointeur (ou celle du clavier) — jamais une seconde bulle. Avec ib_value_tooltip à false, le panneau s'ouvre quand même pour elle, sans les chiffres. Balisage accepté
is_super_tooltip_titlestring""Le titre en gras de son info-bulle, écrit dans le panneau sous son nom
is_super_tooltip_textstring""Le texte de son info-bulle, dans le panneau. Balisage accepté
is_super_tooltip_imagestring""Une image en tête de son info-bulle, dans le panneau (chemin du bundle, chemin absolu ou resources.dll:nom)

Exemples #

Un anneau et son total #

// A hole of 60 % of the radius : a doughnut
uo_pie.id_inner_radius = 0.6

// In the hole : the slice under the pointer, in bold above its name ;
// at rest, the total of the slices shown above the word Total
uo_pie.is_center_text = "[b]#hover_value#[/b][br]#hover_label#"

// Whole numbers with a thousands separator : a display format, as in a DataWindow
uo_pie.is_format = "#,##0"

Une demi-roue en jauge #

// From the left, over half a circle : the upper half
uo_pie.ii_start_angle = -90
uo_pie.ii_sweep_angle = 180
uo_pie.id_inner_radius = 0.62

// What is spent and what is left, in the colour they mean
uo_pie.of_add_slice(/*key*/ "spent", /*label*/ "Spent", /*value*/ 72, /*color*/ RGB(/*red*/ 15, /*green*/ 108, /*blue*/ 189))
uo_pie.of_add_slice(/*key*/ "left", /*label*/ "Remaining", /*value*/ 28, /*color*/ RGB(/*red*/ 150, /*green*/ 150, /*blue*/ 150))

// The share spent, in the hole : worked out by the chart, it follows every new value
uo_pie.is_center_text = "[b]#percent:spent#[/b][br]spent"

Un tableau de bord qui vit #

// Timer event of the window : new values for the same slices
// Local variables
string ls_keys[] = {"s1", "s2", "s3"}
double ld_load[]

// Read the figures, then hand them to the slices already on the chart : they
// SLIDE to their new angles instead of replaying their arrival
ld_load = wf_read_load()
uo_pie.of_set_values(/*keys*/ ls_keys, /*values*/ ld_load)

Ouvrir les lignes derrière une part #

// Event ue_slice_dblclicked of uo_pie : the key of the slice is the region
wf_open_orders(/*region*/ as_key, /*amount*/ ad_value)

Un menu sur une part #

// Event ue_slice_rclicked of uo_pie : (string as_key, long al_x, long al_y)
// Remember the slice, then open the contextmenu of the window where the gesture
// was made : the pointer, or the middle of the slice for the Menu key
is_menu_slice = as_key
uo_menu.of_show(/*x*/ al_x, /*y*/ al_y)

Depuis un DataStore #

// Local variables
long ll_rc

// One slice per category : the rows of a category are SUMMED into its slice
uo_pie.of_map(/*role*/ u_pbt_chartpie.ROLE_KEY, /*column*/ "category")
uo_pie.of_map(/*role*/ u_pbt_chartpie.ROLE_LABEL, /*column*/ "category")
uo_pie.of_map(/*role*/ u_pbt_chartpie.ROLE_VALUE, /*column*/ "amount")

// ONE call reads every row of the DataStore retrieved when the window opened
// (an instance variable), no loop
ll_rc = uo_pie.of_from_datastore(/*ads*/ ids_sales)

// A row with no category is skipped : the chart says how many
if uo_pie.of_get_last_error() <> "" then wf_status(uo_pie.of_get_last_error())

La DataWindow à l'écran, relue sur place #

// Open event of the window : the chart reads the DataWindow the user sees
uo_pie.of_map(/*role*/ u_pbt_chartpie.ROLE_KEY, /*column*/ "region")
uo_pie.of_map(/*role*/ u_pbt_chartpie.ROLE_VALUE, /*column*/ "amount")
uo_pie.of_from_datastore(/*adw*/ dw_sales)
// After a Retrieve : the slices follow IN PLACE - a region the user hid from
// the legend stays hidden, a new region gets its slice
dw_sales.Retrieve()
uo_pie.of_reload()

Les petites parts dans « Autres » #

// Every slice under 5 % of the total joins ONE slice, drawn last in grey,
// and only the six largest products keep a slice of their own
uo_pie.id_others_threshold = 5
uo_pie.ii_others_top = 6
uo_pie.is_others_label = "Other products"

// The largest first : the reader compares them from the top
uo_pie.is_sort = u_pbt_chartpie.SORT_DESC
// Event ue_slice_clicked of uo_pie : a click on Others opens the slices it holds
// Local variables
string ls_keys[]

// Others names the slices it gathered
if as_key = uo_pie.OTHERS_KEY then
	uo_pie.of_others_keys(/*keys*/ ls_keys)
	wf_open_products(/*keys*/ ls_keys)
end if

Bonnes pratiques #

Hérité du socle commun #

Ces membres existent sur tous les composants visuels — ils ne sont pas propres à celui-ci. Ils sont détaillés une seule fois, dans les chapitres transverses ; cette table dit seulement où les lire.

MembresRôleDétaillé dans
of_count · of_keys_at · of_hasParcourir ce que le composant contient3.2 Les items
of_resetRemettre le composant à zéro3.6 Remettre un composant à zéro : of_reset()
of_register_shortcut · of_clear_shortcutsRaccourcis clavier du composant3.5 Les raccourcis clavier
of_is_created · of_is_ready · of_get_last_errorS'il est né, s'il est prêt, ce qui a échoué3.7 Diagnostic
of_save_as_png · of_save_as_jpgExporter le rendu en image3.8 Exporter le rendu en image
of_set_redrawGrouper les modifications en un seul repaint3.10 Bonnes pratiques
of_preload_iconsIcônes affichées sans délaiAffichage instantané : of_icon
of_set_translationTraduire un libellé du composant5.2 Adapter un libellé : of_set_translation
of_focus_webviewDonner le focus au composant6.4 Clavier et focus
of_print · of_print_to_pdfImprimer, ou écrire un PDF6.9 Imprimer
of_set_property · of_get_property · of_component_namePiloter une propriété par son nom3.1 Le moteur de propriétés
is_accessible_name · is_accessible_descriptionLe nom et la description que dit un lecteur d'écran3.4 Propriétés et events optionnels

Deux aides ne sont pas héritées : of_icon et of_escape_markup vivent sur n_pbt_utils. Déclarez-en une — n_pbt_utils lnv_utils, rien à créer — et appelez-les dessus.

← Référence des composants · Sommaire du guide