[progliste] Re: WxPython et touches du clavier

2017-05-16 Par sujet Jean-François Colas

Hello Abdel,

Thanks again. en complément de ton message, j'ai ressorti un des "tutos" 
que j'ai sur WxPython, dont le titre est :
Programmer des interfaces graphiques avec le framework open source 
wxPython - Club d'entraide des développeurs francophones


Je n'ai pas d'URL car je ne l'ai qu'en local.

Il insiste, au moins au début,  sur la manière d'exploiter la doc de 
WXWidgets en montrant comment les en-têtes de classes C++ se transposent 
en WxPython.


C'est le premier tuto que j'avais récupéré. Pas forcément le plus 
facile, mais qui prend plutôt de" la valeur avec le temps.


Bonne soirée,
J.-F.


Le 16/05/2017 18:50, Abdel a écrit :

De rien JF,

Pour connaitre les différentes méthodes et attributs des objets du 
module wx, je te propose ce qui suit :


Comme du côté de chez NVDA, le module wx est intégré, il te suffit 
d'ouvrir la console Python de NVDA avec NVDA + Contrôle + Z.


Ensuite, inutile d'importer le module wx, il est importé par défaut 
dans la console.


Tape wx, suivi d'un point, puis réalise 2 tabulations.

La liste complète des méthodes et attributs du module wx devrait 
s'afficher devant toi, tu pourras circuler à l'intérieur avec tes 
flèches verticales.


Cette liste reconnait également l’auto complétion, c'est à dire que si 
tu écrit wx.WXK et que tu tabules 2 fois, tu auras toute la liste des 
constantes des touches intégrées dans le module.


Si parmi toutes ces méthodes et attributs, il y en a une qui retient 
ton attention, valide sur entrée pour l'insérer, puis help(taLigne) 
pour consulter l'aide.


Pour avoir les méthodes et attributs de la classe wx.Frame, tape 
simplement wx.Frame, suivi d'un point, puis 2 tabulations.


Tu pourras le faire pour toute les classes du module wx ou n'importe 
quel autre module...


Bien amicalement,
Abdel.


Le 15/05/2017 à 21:10, Jean-François Colas a écrit :

Hello Abdel et tous,

Merci pour cette page. Elle a répondu tout à fait à mon 
interrogation. Je n'ai pas encore appliqué sur mon code, mais le code 
du programme me laisse bon espoir. Après ça, faudra quand même que je 
me trouve du temps pour prendre en main la circulation dans la doc 
Wx, parce que les attributs des différents objets, ne s'inventent pas...



Bonne soirée,
J.-F.



Le 14/05/2017 11:59, Abdel a écrit :

Coucou JF,

Généralement, une wx.Frame est utilisée pour servir de conteneur, elle
peut inclure une barre de menu, 1 ou plusieurs panels comportant à
leurs tours différents
Widget, etc.

Le wx.Dialog est plus orienté dialogue comme son nom l'indique.

Dans mon usage personnel, je n'utilise des wx.Dialog que si j'ai à
faire à des commandes de formulaires, comme des case à cocher, des
boutons, bouton-radios, etc...

Je préfère disposer ces widgets dans une wx.Dialog plutôt qu'une
wx.Frame...

Sinon, pour la définition d'un handler unique pour tous tes boutons,
bien sûr que c'est possible !

Voici une page qui décrit la chose, in English :

https://www.blog.pythonlibrary.org/2011/09/20/wxpython-binding-multiple-widgets-to-the-same-handler/ 




En gros, ce sera :

buttons = [self.button1, self.button2]
for button in buttons:
self.tonHandlerUnique(button)

Je n'ai pas eu le temps de le mettre en pratique pour ton exemple,
mais tu peux essayer si tu veux.

Voila, merci à toi.

Bien amicalement,
*Abdel.


Le 13/05/2017 à 18:10, Jean-François Colas a écrit :

Hello Abdel,

Cool, je n'imaginais pas qu'on puisse traiter un dialogue comme une
frame: quelles peuvent être alors les avantages d'une frame du coup,
en tout cas pour une utilisation courante?

Est-ce que selon toi ou vous autres, il serait possible de rendre
plus générale la méthode parcourir1 de sorte qu'elle puisse être
associée à deux boutons différents, que je puisse savoir lequel a
provoqué l'appel de cette procédure pour agir en conséquence? Vu que
c'est quasi le même code à l'exception de quelques 2 à laplace de 1
lol?

Bon je reverrai tout ça un peu plus en détail lorsque j'aurai du
braille sous les doigts...

Bonne soirée,
J.-F.


Le 12/05/2017 23:31, Abdel a écrit :

Coucou JF,

Tu as fait du beau boulot, et j'ai de bonnes nouvelles pour toi, en
matière de simplification du code.

Comme tu l'as bien compris, il est vrai que l'on ne peut avoir une
navigation tabulaire dans une wxFrame, que si l'on insère nos widgets
dans un panel, ou que l'on utilise le style wx.TAB_TRAVERSAL dans 
notre

Frame.

C'est vrai pour la wx.Frame, mais pas pour la wx.Dialog !

Dans une wx.Dialog, la navigation tabulaire est déja comprise par
défaut.

Donc, c'est un premier avantage.

Second avantage pour la wx.Dialog, c'est qu'elle nous épargne le
fait de
devoir se casser la tête à associer des événements pour la touche
escape, le fait de disposer d'un bouton annuler avec sa méthode
appropriée suffit pour que la wx.Dialog associe la fermeture à la
touche
escape, où que l'on soit dans celle-ci.

Donc, encore pas mal de li

[progliste] Re: WxPython et touches du clavier

2017-05-16 Par sujet Abdel

De rien JF,

Pour connaitre les différentes méthodes et attributs des objets du 
module wx, je te propose ce qui suit :


Comme du côté de chez NVDA, le module wx est intégré, il te suffit 
d'ouvrir la console Python de NVDA avec NVDA + Contrôle + Z.


Ensuite, inutile d'importer le module wx, il est importé par défaut dans 
la console.


Tape wx, suivi d'un point, puis réalise 2 tabulations.

La liste complète des méthodes et attributs du module wx devrait 
s'afficher devant toi, tu pourras circuler à l'intérieur avec tes 
flèches verticales.


Cette liste reconnait également l’auto complétion, c'est à dire que si 
tu écrit wx.WXK et que tu tabules 2 fois, tu auras toute la liste des 
constantes des touches intégrées dans le module.


Si parmi toutes ces méthodes et attributs, il y en a une qui retient ton 
attention, valide sur entrée pour l'insérer, puis help(taLigne) pour 
consulter l'aide.


Pour avoir les méthodes et attributs de la classe wx.Frame, tape 
simplement wx.Frame, suivi d'un point, puis 2 tabulations.


Tu pourras le faire pour toute les classes du module wx ou n'importe 
quel autre module...


Bien amicalement,
Abdel.


Le 15/05/2017 à 21:10, Jean-François Colas a écrit :

Hello Abdel et tous,

Merci pour cette page. Elle a répondu tout à fait à mon interrogation. 
Je n'ai pas encore appliqué sur mon code, mais le code du programme me 
laisse bon espoir. Après ça, faudra quand même que je me trouve du 
temps pour prendre en main la circulation dans la doc Wx, parce que 
les attributs des différents objets, ne s'inventent pas...



Bonne soirée,
J.-F.



Le 14/05/2017 11:59, Abdel a écrit :

Coucou JF,

Généralement, une wx.Frame est utilisée pour servir de conteneur, elle
peut inclure une barre de menu, 1 ou plusieurs panels comportant à
leurs tours différents
Widget, etc.

Le wx.Dialog est plus orienté dialogue comme son nom l'indique.

Dans mon usage personnel, je n'utilise des wx.Dialog que si j'ai à
faire à des commandes de formulaires, comme des case à cocher, des
boutons, bouton-radios, etc...

Je préfère disposer ces widgets dans une wx.Dialog plutôt qu'une
wx.Frame...

Sinon, pour la définition d'un handler unique pour tous tes boutons,
bien sûr que c'est possible !

Voici une page qui décrit la chose, in English :

https://www.blog.pythonlibrary.org/2011/09/20/wxpython-binding-multiple-widgets-to-the-same-handler/ 




En gros, ce sera :

buttons = [self.button1, self.button2]
for button in buttons:
self.tonHandlerUnique(button)

Je n'ai pas eu le temps de le mettre en pratique pour ton exemple,
mais tu peux essayer si tu veux.

Voila, merci à toi.

Bien amicalement,
*Abdel.


Le 13/05/2017 à 18:10, Jean-François Colas a écrit :

Hello Abdel,

Cool, je n'imaginais pas qu'on puisse traiter un dialogue comme une
frame: quelles peuvent être alors les avantages d'une frame du coup,
en tout cas pour une utilisation courante?

Est-ce que selon toi ou vous autres, il serait possible de rendre
plus générale la méthode parcourir1 de sorte qu'elle puisse être
associée à deux boutons différents, que je puisse savoir lequel a
provoqué l'appel de cette procédure pour agir en conséquence? Vu que
c'est quasi le même code à l'exception de quelques 2 à laplace de 1
lol?

Bon je reverrai tout ça un peu plus en détail lorsque j'aurai du
braille sous les doigts...

Bonne soirée,
J.-F.


Le 12/05/2017 23:31, Abdel a écrit :

Coucou JF,

Tu as fait du beau boulot, et j'ai de bonnes nouvelles pour toi, en
matière de simplification du code.

Comme tu l'as bien compris, il est vrai que l'on ne peut avoir une
navigation tabulaire dans une wxFrame, que si l'on insère nos widgets
dans un panel, ou que l'on utilise le style wx.TAB_TRAVERSAL dans 
notre

Frame.

C'est vrai pour la wx.Frame, mais pas pour la wx.Dialog !

Dans une wx.Dialog, la navigation tabulaire est déja comprise par
défaut.

Donc, c'est un premier avantage.

Second avantage pour la wx.Dialog, c'est qu'elle nous épargne le
fait de
devoir se casser la tête à associer des événements pour la touche
escape, le fait de disposer d'un bouton annuler avec sa méthode
appropriée suffit pour que la wx.Dialog associe la fermeture à la
touche
escape, où que l'on soit dans celle-ci.

Donc, encore pas mal de ligne en moins...

Je te joins en PJ, ton code avec ta wx.Frame transformée en wx.Dialog,
dis-moi ce que tu en penses.

Ne rigole pas pour le nom de la classe principale, MonPtitDialog, 
lol !


Voila, merci pour ta passion pour le Python et le wxPython, je suis un
passionné également.

Bien amicalement,
Abdel.


Le 12/05/2017 à 21:20, Jean-François Colas a écrit :

Hello tous,

Oui, après tout, pourquoi pas vous faire part de mon petit
amusement... Pas par sagesse, oh non lol.

J'avais trois objectifs avec ce petit truc en PJ. L'un étant de
construire une petite interface pour sélectionner deux fichiers, dont
les noms à terme sont voués à être 

[progliste] Re: javascript convertir un nombre en toutes lettres

2017-05-16 Par sujet daniel serge free
Merci Yannick, même si on ne s'en sert pas tout de suite, on stocke au cas 
où...
Serge


--
From: "Yannick Youalé" 
Sent: Tuesday, May 16, 2017 12:11 PM
To: 
Subject: [progliste] javascript convertir un nombre en toutes lettres

Salut les mecs,


Je vous propose un code javascript de convertion de nombre en toutes
lettres.


Certes pour les DV l'intérêt est limité car nos logiciels de synthèse
vocale nous lisent déjà correctement les nombres, mais pour ceux qui ont
des pages de facturations ou simplement des champs d'affichage de
montant en argent sur leurs sites, ils pourraient y trouver une utilité.


Il y a de cela quelques siècles, j'avais proposé une version de ce code
en VBA, que j'ai bien évidemment amélioré depuis.


J'aurais bien aimé encapsuler ces fonctions dans une classes, mais le
javascript ne le permet pas en natif. Donc, il s'agit d'un groupe de
fonctions dont celle que vous utiliserez le plus sera ConvertNumber.


Attention voici le code:


Début du code javascript


// code permettant de convertir un nombre en toutes lettres
// prend en compte les décimales
// limité à 999 999 999 999 999 soit aux trillions
// la seule fonction à utiliser est ConvertNumber(sNumber

function ConvertUnit(sNumber){
// convertit un chiffre isolé
var tbl;
// On Error Resume } // Next
tbl = new Array("", "un", "deux", "trois", "quatre", "cinq", "six",
"sept", "huit", "neuf");
return tbl[parseInt(sNumber)];
} // end function

function ConvertTen(sNumber){
// convertit un nombre dans les dizaines
var tbl;
tbl = new Array("", "dix", "vingt", "trante", "quarante", "cinquante",
"soixante", "soixante-dix", "quatre-vingt", "quatre-vingt-dix");
return tbl[parseInt(sNumber)];
} // end function

function ConvertTenSpecial(sNumber){
// les nombres spéciaux de la langue française
// renvoi chaîne vide si aucune équivalance
var s;
var i1;
var i2;
s = "";
i1 = sNumber.substring(0, 1);
i2 = sNumber.substring(1, 2);
switch (i1) {
case "1":
case "7":
case "9":
if(i2 == "1"){
if (i1 != "1"){ s = ConvertTen(i1 - 1); }
s = s + " onze";
} else if(i2 == "2"){
if (i1 != "1"){ s = ConvertTen("" + (parseInt(i1) - 1) + ""); }
s = s + " douze";
} else if(i2 == "3"){
if (i1 != "1"){ s = ConvertTen("" + (parseInt(i1) - 1) + ""); }
s = s + " treize";
} else if(i2 == "4"){
if (i1 != "1"){ s = ConvertTen("" + (parseInt(i1) - 1) + ""); }
s = s + " quatorze";
} else if(i2 == "5"){
if (i1 != "1"){ s = ConvertTen("" + (parseInt(i1) - 1) + ""); }
s = s + " quinze";
} else if(i2 == "6"){
if (i1 != "1"){ s = ConvertTen("" + (parseInt(i1) - 1) + ""); }
s = s + " seize";
} // end if
} // end select
// renvoi
return s.trim();
} // end function

function ConvertHundred(sNumber){
// convertit un nombre limité à la centaine
var i;
var s = "";
var sHundred;
var sTen;
var sTenSpecial;
var sUnit;
// ajout de 0 si nécessaire
i = 3 - sNumber.length;
if (i > 0){ sNumber = "0".repeat(i) + sNumber; }
// vérification
if(sNumber == "000"){
return "";
} // fin si
// centaine
sHundred = sNumber.substring(0, 1);
// dizaine
sTen = sNumber.substring(1, 2);
// unité
sUnit = sNumber.substring(2, 3);
// centaine
if (sHundred != "0"){
if (sHundred == "1"){
s = "cent";
} else {
s = ConvertUnit(sHundred) + " cents";
} // end if
} // end if ' fin des centaines
// dizaine
// vérification si dizaine spéciale
sTenSpecial = ConvertTenSpecial(sNumber.substring(1, 3));
if (sTenSpecial != ""){
s = s + " " + sTenSpecial;
} else {
// si dizaine normale
if (sTen != "0"){
s = s + " " + ConvertTen(sTen);
} // end if ' fin des dizaines
// unité
if (sTen != "0" && sUnit == "1"){ s = s + " et"; }
if (sUnit == "1"){
s = s + " " + ConvertUnit(sUnit);
} else if(sUnit != "0"){
s = s + "-" + ConvertUnit(sUnit);
} // end if
} // end if ' fin si dixaine spéciale ou pas
// renvoi
s = s.trim();
return s;
} // end function

function ConvertIntegerNumber(sNumber){
// convertit un nombre entier en toutes lettres.
var i;
var s;
var s2;
var sHundred;
// vérification si numérique
// sNumber = sNumber.trim();
sNumber = sNumber.replace(" ", "");
if (isFinite(sNumber) == false){
return "";
} // end if
// on complète avec des 0
// jusqu'à  la longueur maximale
// qui est de 999 trillions.
// ce qui fait au maximum 15 caractères
i = 15 - sNumber.length;
// exception
if (i < 0){
return "";
} // end if
sNumber = "0".repeat(i) + sNumber;
// s'il n'y a que des zéro
if(sNumber.match("^[0]+$")){
return "zéro";
} // fin si
// parcours des cinq branches de trois caractères
// tout en complétant le texte résultat
s = "";
for(i=1; i<=5; i++){
sHundred = sNumber.substring((i - 1) * 3, ((i - 1) * 3) + 3);
s2 = ConvertHundred(sHundred);
// selon la branche
switch (i) {
case 1: // trillion
if (s2 != ""){
s = s + " " + s2 + " trillion";
// si pluriel
if (s2 != "un"){ s = s + "s"; }
} // end if
break;
case 2: // milliard
if (s2 != ""){
s = s + " " + s2 + " milliard";
// si pluriel
if (s2 != "un"){ s = s + "s"; }
} // end if
break;
case 3: // million
if (s2 != ""){
s = s + " " + 

[progliste] javascript convertir un nombre en toutes lettres

2017-05-16 Par sujet Yannick Youalé

Salut les mecs,


Je vous propose un code javascript de convertion de nombre en toutes 
lettres.



Certes pour les DV l'intérêt est limité car nos logiciels de synthèse 
vocale nous lisent déjà correctement les nombres, mais pour ceux qui ont 
des pages de facturations ou simplement des champs d'affichage de 
montant en argent sur leurs sites, ils pourraient y trouver une utilité.



Il y a de cela quelques siècles, j'avais proposé une version de ce code 
en VBA, que j'ai bien évidemment amélioré depuis.



J'aurais bien aimé encapsuler ces fonctions dans une classes, mais le 
javascript ne le permet pas en natif. Donc, il s'agit d'un groupe de 
fonctions dont celle que vous utiliserez le plus sera ConvertNumber.



Attention voici le code:


Début du code javascript


// code permettant de convertir un nombre en toutes lettres
// prend en compte les décimales
// limité à 999 999 999 999 999 soit aux trillions
// la seule fonction à utiliser est ConvertNumber(sNumber

function ConvertUnit(sNumber){
// convertit un chiffre isolé
var tbl;
// On Error Resume } // Next
tbl = new Array("", "un", "deux", "trois", "quatre", "cinq", "six", 
"sept", "huit", "neuf");

return tbl[parseInt(sNumber)];
} // end function

function ConvertTen(sNumber){
// convertit un nombre dans les dizaines
var tbl;
tbl = new Array("", "dix", "vingt", "trante", "quarante", "cinquante", 
"soixante", "soixante-dix", "quatre-vingt", "quatre-vingt-dix");

return tbl[parseInt(sNumber)];
} // end function

function ConvertTenSpecial(sNumber){
// les nombres spéciaux de la langue française
// renvoi chaîne vide si aucune équivalance
var s;
var i1;
var i2;
s = "";
i1 = sNumber.substring(0, 1);
i2 = sNumber.substring(1, 2);
switch (i1) {
case "1":
case "7":
case "9":
if(i2 == "1"){
if (i1 != "1"){ s = ConvertTen(i1 - 1); }
s = s + " onze";
} else if(i2 == "2"){
if (i1 != "1"){ s = ConvertTen("" + (parseInt(i1) - 1) + ""); }
s = s + " douze";
} else if(i2 == "3"){
if (i1 != "1"){ s = ConvertTen("" + (parseInt(i1) - 1) + ""); }
s = s + " treize";
} else if(i2 == "4"){
if (i1 != "1"){ s = ConvertTen("" + (parseInt(i1) - 1) + ""); }
s = s + " quatorze";
} else if(i2 == "5"){
if (i1 != "1"){ s = ConvertTen("" + (parseInt(i1) - 1) + ""); }
s = s + " quinze";
} else if(i2 == "6"){
if (i1 != "1"){ s = ConvertTen("" + (parseInt(i1) - 1) + ""); }
s = s + " seize";
} // end if
} // end select
// renvoi
return s.trim();
} // end function

function ConvertHundred(sNumber){
// convertit un nombre limité à la centaine
var i;
var s = "";
var sHundred;
var sTen;
var sTenSpecial;
var sUnit;
// ajout de 0 si nécessaire
i = 3 - sNumber.length;
if (i > 0){ sNumber = "0".repeat(i) + sNumber; }
// vérification
if(sNumber == "000"){
return "";
} // fin si
// centaine
sHundred = sNumber.substring(0, 1);
// dizaine
sTen = sNumber.substring(1, 2);
// unité
sUnit = sNumber.substring(2, 3);
// centaine
if (sHundred != "0"){
if (sHundred == "1"){
s = "cent";
} else {
s = ConvertUnit(sHundred) + " cents";
} // end if
} // end if ' fin des centaines
// dizaine
// vérification si dizaine spéciale
sTenSpecial = ConvertTenSpecial(sNumber.substring(1, 3));
if (sTenSpecial != ""){
s = s + " " + sTenSpecial;
} else {
// si dizaine normale
if (sTen != "0"){
s = s + " " + ConvertTen(sTen);
} // end if ' fin des dizaines
// unité
if (sTen != "0" && sUnit == "1"){ s = s + " et"; }
if (sUnit == "1"){
s = s + " " + ConvertUnit(sUnit);
} else if(sUnit != "0"){
s = s + "-" + ConvertUnit(sUnit);
} // end if
} // end if ' fin si dixaine spéciale ou pas
// renvoi
s = s.trim();
return s;
} // end function

function ConvertIntegerNumber(sNumber){
// convertit un nombre entier en toutes lettres.
var i;
var s;
var s2;
var sHundred;
// vérification si numérique
// sNumber = sNumber.trim();
sNumber = sNumber.replace(" ", "");
if (isFinite(sNumber) == false){
return "";
} // end if
// on complète avec des 0
// jusqu'à  la longueur maximale
// qui est de 999 trillions.
// ce qui fait au maximum 15 caractères
i = 15 - sNumber.length;
// exception
if (i < 0){
return "";
} // end if
sNumber = "0".repeat(i) + sNumber;
// s'il n'y a que des zéro
if(sNumber.match("^[0]+$")){
return "zéro";
} // fin si
// parcours des cinq branches de trois caractères
// tout en complétant le texte résultat
s = "";
for(i=1; i<=5; i++){
sHundred = sNumber.substring((i - 1) * 3, ((i - 1) * 3) + 3);
s2 = ConvertHundred(sHundred);
// selon la branche
switch (i) {
case 1: // trillion
if (s2 != ""){
s = s + " " + s2 + " trillion";
// si pluriel
if (s2 != "un"){ s = s + "s"; }
} // end if
break;
case 2: // milliard
if (s2 != ""){
s = s + " " + s2 + " milliard";
// si pluriel
if (s2 != "un"){ s = s + "s"; }
} // end if
break;
case 3: // million
if (s2 != ""){
s = s + " " + s2 + " million";
// si pluriel
if (s2 != "un"){ s = s + "s"; }
} // end if
break;
case 4: // millier
if (s2 != ""){
if (s2 == "un"){
s = s + " mille";
} else {
s = s + " " + s2 + " mille";
} // end if
// si pluriel
if (s