Programmer avec le langage Linotte
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Programmer avec le langage LinotteConnexion

Besoin d'un conseil sur la programmation en Linotte ?

-50%
Le deal à ne pas rater :
-50% sur les sacs à dos pour ordinateur portable Urban Factory ...
19.99 € 39.99 €
Voir le deal

Linotte 1.7, les favoris et greffons en Python

power_settings_newSe connecter pour répondre
5 participants

descriptionpython - Linotte 1.7, les favoris et greffons en Python - Page 3 EmptyRE: Linotte 1.7, les favoris et greffons en Python

more_horiz
Il reste deux mois avant la sortie de la version 1.7
Si vous avez des exemples que je peux mettre dans le répertoire contribution ou des bogues à remonter... c'est maintenant !!

descriptionpython - Linotte 1.7, les favoris et greffons en Python - Page 3 EmptyRE: Linotte 1.7, les favoris et greffons en Python

more_horiz
Moi ces temps-ci j'essaye de réguler mon sommeil (après un examen du sommeil catastrophique), ça me prend tout mon temps hihi x) (pis surtout d'habitude quand je progra c'est à 6 heures du matin donc là faut pas xD)

Mais dès que je me sens un peu mieux, je reprend la progra promis ! Même si je suis complètement broyé par tant de nouveautés...

Tu travailles trop x) (même si ça fait plaisir à Wam)

descriptionpython - Linotte 1.7, les favoris et greffons en Python - Page 3 EmptyRE: Linotte 1.7, les favoris et greffons en Python

more_horiz
Bon, si je comprends bien, je vais devoir mettre un contrôle parental sur l'Atelier ?
Interdiction de l'ouvrir entre 22h et 6h de matin :-)

descriptionpython - Linotte 1.7, les favoris et greffons en Python - Page 3 EmptyRE: Linotte 1.7, les favoris et greffons en Python

more_horiz
xD faudrait le mettre sur tout mon ordi ^^

descriptionpython - Linotte 1.7, les favoris et greffons en Python - Page 3 EmptyRE: Linotte 1.7, les favoris et greffons en Python

more_horiz
Étant donné que l'IHM est en développement, difficile de savoir les bogues que l'on peut remonter de ceux qui sont déjà en cours d'étude.

Je signale tout de même qu'au premier démarrage de mon programme, il y a juste la fenêtre principale qui s'affiche : les menus et la toile n'apparaissent pas.
Je doit donc relancer mon programme pour que tous les éléments s'affichent correctement.
Ensuite, je peut arrêter et relancer mon programme sans problèmes.

En fait, je programme très peu l'IHM, juste le minimum, à cause du problème d'initialisation des évènements, reporté ici : [url:r88j8d48]http:
//langagelinotte.
free.
fr/forum/showthread.
php?tid=913[/url:r88j8d48]

En effet, malgré l'utilisation du système de passerelles de Momo, ce problème provoque beaucoup de bogues dans mes fenêtres.
C'est pourquoi je préfère attendre la prochaine version de Linotte pour utiliser pleinement l'IHM.

descriptionpython - Linotte 1.7, les favoris et greffons en Python - Page 3 EmptyRE: Linotte 1.7, les favoris et greffons en Python

more_horiz
A vu de nez.... je ne pense pas que ce soit un problème de Linotte.
A mois que tu puisses me produire un exemple qui fonctionne et qui peut reproduire ton bogue.

Cette semaine, je vais analyser tes problèmes de lenteur.

Cpc

descriptionpython - Linotte 1.7, les favoris et greffons en Python - Page 3 EmptyRE: Linotte 1.7, les favoris et greffons en Python

more_horiz
En fait, je ne comprend pas d'où vient ce problème d'initialisation des évènements.
Je poste un exemple :
[php]
Editeur de cartes :
Grands rôles :
("Fenêtre principale")
Fenêtre_principale est un formulaire, hauteur vaut 828, largeur vaut 800, titre vaut "Editeur de cartes"

("Fenêtre_avertissement")
Fenêtre_avertissement est un formulaire, hauteur vaut 110, largeur vaut 400, titre vaut "Attention", visible vaut "non", x vaut 450, y vaut 255
txt_Fa1 est une étiquette, texte vaut "", x vaut 170, y vaut 10
txt_Fa2 est une étiquette, texte vaut "", x vaut 60, y vaut 30
bouton_valider_Fa est un bouton, texte vaut "Ok", x vaut 100, y vaut 80
bouton_annuler_Fa est un bouton, texte vaut "Annuler", x vaut 200, y vaut 80

("Fenêtre nouveau quadrillage")
Fenêtre_nouveau_quadrillage est un formulaire, hauteur vaut 140, largeur vaut 300, titre vaut "Nouveau quadrillage", visible vaut "non", x vaut 450, y vaut 255
txt_Fnq1 est une étiquette, texte vaut "Nombre de cases en largeur :", x vaut 10, y vaut 10
txt_Fnq2 est une étiquette, texte vaut "Nombre de cases en hauteur :", x vaut 10, y vaut 30
txt_Fnq3 est une étiquette, texte vaut "Largeur des cases :", x vaut 10, y vaut 50
txt_Fnq4 est une étiquette, texte vaut "Hauteur des cases :", x vaut 10, y vaut 70
choix_case_largeur est un sélecteur, valeurs vaut "", x vaut 200, y vaut 10
choix_case_hauteur est un sélecteur, valeurs vaut "", x vaut 200, y vaut 30
choix_taille_largeur_case est un sélecteur, valeurs vaut "", x vaut 200, y vaut 50
choix_taille_hauteur_case est un sélecteur, valeurs vaut "", x vaut 200, y vaut 70
bouton_valider_Fnq est un bouton, texte vaut "Valider", x vaut 70, y vaut 110
bouton_annuler_Fnq est un bouton, texte vaut "Annuler", x vaut 160, y vaut 110

("Menus")
menu2 est un menu, texte vaut "Carte"
menu2s1 est un sousmenu, texte vaut "Nouveau quadrillage"

("Toile")
fond est une toile, hauteur vaut 800, largeur vaut 800, couleur vaut "blanc", pointeur vaut "flèche"
xtoile est une xtoile, x vaut 0, y vaut 0
bordure_gauche est un rectangle, x = 0, y = 0, position vaut 1, hauteur vaut hauteur de fond, largeur vaut 150, plein vaut "oui", couleur vaut "blanc"

("Quadrillage")
taille_largeur_case est un nombre
taille_hauteur_case est un nombre
nombre_case_largeur est un nombre
nombre_case_hauteur est un nombre
nombre_case_largeur_effectif est un nombre
nombre_case_hauteur_effectif est un nombre
nombre_case est un nombre

grille4 est un casier de rectangle
grille5 est un casier de rectangle

Fenêtre_principale :
Rôles :
Actions :
Tu ajoutes xtoile dans Fenêtre_principale
visible de Fenêtre_principale vaut "oui"
Tu ajoutes menu2 dans Fenêtre_principale
Tu ajoutes menu2s1 dans menu2
Tu fais réagir Fenêtre_principale à "clic souris" pour Fermer_fenêtre_principale
Tu fais réagir menu2s1 à "clic souris" pour Fenêtre_nouveau_quadrillage

Efface la toile
Projette le fond & bordure_gauche

tant que 1 est différent de 2, lis
temporise
ferme

Fenêtre_avertissement :
Rôles :
Actions :
visible de Fenêtre_avertissement vaut "oui"
Tu ajoutes txt_Fa1 & txt_Fa2 & bouton_valider_Fa & bouton_annuler_Fa dans Fenêtre_avertissement

texte de txt_Fa1 vaut "Attention" ;
x de txt_Fa1 vaut 170 ;
y de txt_Fa1 vaut 10
texte de txt_Fa2 vaut "Toutes vos données vont être effacées" ;
x de txt_Fa2 vaut 85 ;
y de txt_Fa2 vaut 30

Tu fais réagir Fenêtre_avertissement à "clic souris" pour Fermer_fenêtre_avertissement
Tu fais réagir bouton_valider_Fa à "clic souris" pour Fermer_fenêtre_avertissement
Tu fais réagir bouton_valider_Fa à "clic souris" pour Réinitialisation
Tu fais réagir bouton_annuler_Fa à "clic souris" pour Fermer_fenêtre_avertissement
Tu fais réagir bouton_annuler_Fa à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage

Fenêtre_nouveau_quadrillage :
Rôles :
§ i est un nombre
Actions :
visible de Fenêtre_nouveau_quadrillage vaut "oui"
Tu ajoutes txt_Fnq1 & txt_Fnq2 & txt_Fnq3 & txt_Fnq4 & choix_case_largeur & choix_case_hauteur & choix_taille_largeur_case & choix_taille_hauteur_case & bouton_valider_Fnq & bouton_annuler_Fnq dans Fenêtre_nouveau_quadrillage
Tu fais réagir Fenêtre_nouveau_quadrillage à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage
Tu fais réagir bouton_annuler_Fnq à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage
Tu fais réagir bouton_valider_Fnq à "clic souris" pour Générer_quadrillage

Pour i de 1 à 100, lis
Tu ajoutes i +"|" dans valeurs@choix_case_largeur
Tu ajoutes i +"|" dans valeurs@choix_case_hauteur
Tu ajoutes i +"|" dans valeurs@choix_taille_largeur_case
Tu ajoutes i +"|" dans valeurs@choix_taille_hauteur_case
Tu fermes

Fermer_fenêtre_principale :
Rôles :
*f :: formulaire
Actions :
Efface la toile
Tu termines

Fermer_fenêtre_avertissement :
Rôles :
Actions :
visible de Fenêtre_avertissement vaut "non"
Tu reviens

Fermer_fenêtre_nouveau_quadrillage :
Rôles :
Actions :
visible de Fenêtre_nouveau_quadrillage vaut "non"
Tu reviens

Générer_quadrillage :
Rôles :
§ valeur1 est un texte
§ valeur2 est un texte
§ valeur3 est un texte
§ valeur4 est un texte
Actions :
Si nombre_case != 0 alors va vers Fenêtre_avertissement

valeur1 = valeur@choix_case_largeur
Tu convertis valeur1 en nombre_case_largeur
valeur2 = valeur@choix_case_hauteur
Tu convertis valeur2 en nombre_case_hauteur
valeur3 = valeur@choix_taille_largeur_case
Tu convertis valeur3 en taille_largeur_case
valeur4 = valeur@choix_taille_hauteur_case
Tu convertis valeur4 en taille_hauteur_case

nombre_case_largeur_effectif = entier ((largeur de fond - largeur de bordure_gauche) / taille_largeur_case)
nombre_case_hauteur_effectif = entier (hauteur de fond / taille_hauteur_case)
Si nombre_case_largeur_effectif >
nombre_case_largeur alors nombre_case_largeur_effectif = nombre_case_largeur
Si nombre_case_hauteur_effectif >
nombre_case_hauteur alors nombre_case_hauteur_effectif = nombre_case_hauteur
nombre_case = nombre_case_hauteur_effectif*nombre_case_largeur_effectif

visible de Fenêtre_nouveau_quadrillage vaut "non"

Tu vas vers Affichage_quadrillage

Affichage_quadrillage :
Rôles :
§ case est un rectangle, couleur vaut "blanc", hauteur vaut taille_hauteur_case, largeur vaut taille_largeur_case, position vaut 1, plein vaut "oui"
§ contour_case est un rectangle, couleur vaut "noir", hauteur vaut taille_hauteur_case, largeur vaut taille_largeur_case, position vaut 100, plein vaut "non"
xx est un nombre <
- (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case))/2) + largeur de bordure_gauche
yy est un nombre <
- (hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2
Actions :
("ici on dessine des cases pleines")
pour chaque nombre_case, lis
ajoute #case dans grille4
déplace grille4{joker} vers xx et yy
projette grille4{joker}
yy = yy + taille_hauteur_case
si yy est plus grand que (((hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2) + (nombre_case_hauteur_effectif * taille_hauteur_case)) - taille_hauteur_case alors lis
yy = (hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2
xx = xx + taille_largeur_case
ferme
si xx est plus grand que largeur de bordure_gauche + (nombre_case_largeur_effectif * taille_largeur_case) + ((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case)) alors lis
xx = (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case))/2) + largeur de bordure_gauche
ferme
ferme
xx = (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case))/2) + largeur de bordure_gauche
yy = (hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2

("ici on dessine le contour des cases")
pour chaque nombre_case, lis
ajoute #contour_case dans grille5
déplace grille5{joker} vers xx et yy
Projette grille5{joker}
yy = yy + taille_hauteur_case
si yy est plus grand que (((hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2) + (nombre_case_hauteur_effectif * taille_hauteur_case)) - taille_hauteur_case alors lis
yy = (hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2
xx = xx + taille_largeur_case
ferme
si xx est plus grand que largeur de bordure_gauche + (nombre_case_largeur_effectif * taille_largeur_case) + ((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case)) alors lis
xx = (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case))/2) + largeur de bordure_gauche
ferme
ferme

Réinitialisation :
Rôles :
§ indice est un nombre
Actions :
taille_largeur_case = 0
taille_hauteur_case = 0
nombre_case_largeur = 0
nombre_case_hauteur = 0
nombre_case_largeur_effectif = 0
nombre_case_hauteur_effectif = 0
nombre_case = 0

Mesure grille4 dans indice
pour chaque indice, lis
Efface (grille4{0})
tu ôtes (grille4{0}) de grille4
ferme
Mesure grille5 dans indice
pour chaque indice, lis
Efface (grille5{0})
tu ôtes (grille5{0}) de grille5
ferme


Efface la toile
Projette le fond & bordure_gauche
Va vers Générer_quadrillage
[/php]

Dans cet exemple, on dessine un quadrillage.
Si on retourne dans le menu "nouveau quadrillage", on peut alors effacer le quadrillage pour en dessiner un nouveau.
Or, la fonction "réinitialisation" va s'activer plusieurs fois jusqu'à faire planter le programme.
Je n'arrive pas à comprendre pourquoi un tel problème existe et comment je dois écrire mon code pour que mon programme fonctionne correctement.

descriptionpython - Linotte 1.7, les favoris et greffons en Python - Page 3 EmptyRE: Linotte 1.7, les favoris et greffons en Python

more_horiz
Je reprend mon exemple précédent :
Ce problème d'initialisation des évènements provoque 3 bogues :
- le bouton ok de la fenêtre d'avertissement se retrouve parfois dans le coin haut à gauche de la fenêtre et non aux coordonnées indiquées dans les grands rôles.

- les paragraphes générer_quadrillage et Réinitialisation sont appelés plusieurs fois, ce qui fait planter le programme

- du fait du plantage du programme, la fenêtre d'avertissement reste ouverte et impossible à refermer sans redémarrer l'atelier

Pour contrer ceci, Momo m'a donné 2 solutions :

1/ Utiliser un système de passerelle à chaque ouverture d'une fenêtre, comme ceci :

[php]
Passerelle :
Rôles :
Actions :
Tu ne fais plus réagir Fenêtre_avertissement à "clic souris"
Tu ne fais plus réagir bouton_valider_Fa à "clic souris"
Tu ne fais plus réagir bouton_annuler_Fa à "clic souris"
Tu ne fais plus réagir Fenêtre_nouveau_quadrillage à "clic souris"
Tu ne fais plus réagir bouton_annuler_Fnq à "clic souris"
Tu ne fais plus réagir bouton_valider_Fnq à "clic souris"
Tu reviens
[/php]

Ceci corrige quelques bogues mais n'est pas suffisant.
Par exemple, dans mon programme actuel, cette technique me permet de faire fonctionner correctement mon paragraphe Réinitialisation.
Du moins, la première fois.
Si je l'exécute une seconde fois, mon paragraphe Réinitialisation est appelé plusieurs fois ce qui fait planter mon programme.
Cette technique est donc incomplète.

2/ Initialiser tous les évènements d'un coup au début du livre et bien vérifier qu'ils sont dans un endroit qui ne sera lu qu'une seule fois par l'interpréteur, comme ceci :
[php]
Fenêtre_principale :
Rôles :
Actions :
Tu projettes Fenêtre_principale
Tu ajoutes xtoile dans Fenêtre_principale
Tu ajoutes menu2 dans Fenêtre_principale
Tu ajoutes menu2s1 dans menu2
Tu fais réagir Fenêtre_principale à "clic souris" pour Fermer_fenêtre_principale
Tu fais réagir menu2s1 à "clic souris" pour Fenêtre_nouveau_quadrillage

Tu ajoutes txt_Fnq1 & txt_Fnq2 & txt_Fnq3 & choix_case_largeur & choix_case_hauteur & choix_taille_case & bouton_valider_Fnq & bouton_annuler_Fnq dans Fenêtre_nouveau_quadrillage
Tu fais réagir Fenêtre_nouveau_quadrillage à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage
Tu fais réagir bouton_annuler_Fnq à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage
Tu fais réagir bouton_valider_Fnq à "clic souris" pour Générer_quadrillage
Tu ajoutes txt_Fa1 & txt_Fa2 & bouton_valider_Fa & bouton_annuler_Fa dans Fenêtre_avertissement
Tu fais réagir Fenêtre_avertissement à "clic souris" pour Fermer_fenêtre_avertissement
Tu fais réagir bouton_valider_Fa à "clic souris" pour Réinitialisation
Tu fais réagir bouton_annuler_Fa à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage
visible@Fenêtre_nouveau_quadrillage vaut "oui"
visible@Fenêtre_nouveau_quadrillage vaut "non"
visible@Fenêtre_avertissement vaut "oui"
visible@Fenêtre_avertissement vaut "non"

tant que 1 est différent de 2, lis
temporise
ferme

[/php]

Cette technique fonctionne.
Par contre, sa reste une solution temporaire étant donné que toutes les fenêtres s'affichent au démarrage de mon programme, avant de devenir invisibles.

En fait, je n'arrive pas à comprendre ce problème "d'initialisation des évènements".
A quoi c'est dû ?
Comment on initialise un évènement ?
Pourquoi l'interpréteur initialise plusieurs fois un évènement ?

Du coup, difficile pour moi de corriger mon code pour supprimer ces différents bogues.

descriptionpython - Linotte 1.7, les favoris et greffons en Python - Page 3 EmptyRE: Linotte 1.7, les favoris et greffons en Python

more_horiz
Wam a écrit:

En fait, je ne comprend pas d'où vient ce problème d'initialisation des évènements.
Je poste un exemple :
[php]
Editeur de cartes :
Grands rôles :
("Fenêtre principale")
Fenêtre_principale est un formulaire, hauteur vaut 828, largeur vaut 800, titre vaut "Editeur de cartes"

("Fenêtre_avertissement")
Fenêtre_avertissement est un formulaire, hauteur vaut 110, largeur vaut 400, titre vaut "Attention", visible vaut "non", x vaut 450, y vaut 255
txt_Fa1 est une étiquette, texte vaut "", x vaut 170, y vaut 10
txt_Fa2 est une étiquette, texte vaut "", x vaut 60, y vaut 30
bouton_valider_Fa est un bouton, texte vaut "Ok", x vaut 100, y vaut 80
bouton_annuler_Fa est un bouton, texte vaut "Annuler", x vaut 200, y vaut 80

("Fenêtre nouveau quadrillage")
Fenêtre_nouveau_quadrillage est un formulaire, hauteur vaut 140, largeur vaut 300, titre vaut "Nouveau quadrillage", visible vaut "non", x vaut 450, y vaut 255
txt_Fnq1 est une étiquette, texte vaut "Nombre de cases en largeur :", x vaut 10, y vaut 10
txt_Fnq2 est une étiquette, texte vaut "Nombre de cases en hauteur :", x vaut 10, y vaut 30
txt_Fnq3 est une étiquette, texte vaut "Largeur des cases :", x vaut 10, y vaut 50
txt_Fnq4 est une étiquette, texte vaut "Hauteur des cases :", x vaut 10, y vaut 70
choix_case_largeur est un sélecteur, valeurs vaut "", x vaut 200, y vaut 10
choix_case_hauteur est un sélecteur, valeurs vaut "", x vaut 200, y vaut 30
choix_taille_largeur_case est un sélecteur, valeurs vaut "", x vaut 200, y vaut 50
choix_taille_hauteur_case est un sélecteur, valeurs vaut "", x vaut 200, y vaut 70
bouton_valider_Fnq est un bouton, texte vaut "Valider", x vaut 70, y vaut 110
bouton_annuler_Fnq est un bouton, texte vaut "Annuler", x vaut 160, y vaut 110

("Menus")
menu2 est un menu, texte vaut "Carte"
menu2s1 est un sousmenu, texte vaut "Nouveau quadrillage"

("Toile")
fond est une toile, hauteur vaut 800, largeur vaut 800, couleur vaut "blanc", pointeur vaut "flèche"
xtoile est une xtoile, x vaut 0, y vaut 0
bordure_gauche est un rectangle, x = 0, y = 0, position vaut 1, hauteur vaut hauteur de fond, largeur vaut 150, plein vaut "oui", couleur vaut "blanc"

("Quadrillage")
taille_largeur_case est un nombre
taille_hauteur_case est un nombre
nombre_case_largeur est un nombre
nombre_case_hauteur est un nombre
nombre_case_largeur_effectif est un nombre
nombre_case_hauteur_effectif est un nombre
nombre_case est un nombre

grille4 est un casier de rectangle
grille5 est un casier de rectangle

Fenêtre_principale :
Rôles :
Actions :
Tu ajoutes xtoile dans Fenêtre_principale
visible de Fenêtre_principale vaut "oui"
Tu ajoutes menu2 dans Fenêtre_principale
Tu ajoutes menu2s1 dans menu2
Tu fais réagir Fenêtre_principale à "clic souris" pour Fermer_fenêtre_principale
Tu fais réagir menu2s1 à "clic souris" pour Fenêtre_nouveau_quadrillage

Efface la toile
Projette le fond & bordure_gauche

tant que 1 est différent de 2, lis
temporise
ferme

Fenêtre_avertissement :
Rôles :
Actions :
visible de Fenêtre_avertissement vaut "oui"
Tu ajoutes txt_Fa1 & txt_Fa2 & bouton_valider_Fa & bouton_annuler_Fa dans Fenêtre_avertissement

texte de txt_Fa1 vaut "Attention" ;
x de txt_Fa1 vaut 170 ;
y de txt_Fa1 vaut 10
texte de txt_Fa2 vaut "Toutes vos données vont être effacées" ;
x de txt_Fa2 vaut 85 ;
y de txt_Fa2 vaut 30

Tu fais réagir Fenêtre_avertissement à "clic souris" pour Fermer_fenêtre_avertissement
Tu fais réagir bouton_valider_Fa à "clic souris" pour Fermer_fenêtre_avertissement
Tu fais réagir bouton_valider_Fa à "clic souris" pour Réinitialisation
Tu fais réagir bouton_annuler_Fa à "clic souris" pour Fermer_fenêtre_avertissement
Tu fais réagir bouton_annuler_Fa à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage

Fenêtre_nouveau_quadrillage :
Rôles :
§ i est un nombre
Actions :
visible de Fenêtre_nouveau_quadrillage vaut "oui"
Tu ajoutes txt_Fnq1 & txt_Fnq2 & txt_Fnq3 & txt_Fnq4 & choix_case_largeur & choix_case_hauteur & choix_taille_largeur_case & choix_taille_hauteur_case & bouton_valider_Fnq & bouton_annuler_Fnq dans Fenêtre_nouveau_quadrillage
Tu fais réagir Fenêtre_nouveau_quadrillage à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage
Tu fais réagir bouton_annuler_Fnq à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage
Tu fais réagir bouton_valider_Fnq à "clic souris" pour Générer_quadrillage

Pour i de 1 à 100, lis
Tu ajoutes i +"|" dans valeurs@choix_case_largeur
Tu ajoutes i +"|" dans valeurs@choix_case_hauteur
Tu ajoutes i +"|" dans valeurs@choix_taille_largeur_case
Tu ajoutes i +"|" dans valeurs@choix_taille_hauteur_case
Tu fermes

Fermer_fenêtre_principale :
Rôles :
*f :: formulaire
Actions :
Efface la toile
Tu termines

Fermer_fenêtre_avertissement :
Rôles :
Actions :
visible de Fenêtre_avertissement vaut "non"
Tu reviens

Fermer_fenêtre_nouveau_quadrillage :
Rôles :
Actions :
visible de Fenêtre_nouveau_quadrillage vaut "non"
Tu reviens

Générer_quadrillage :
Rôles :
§ valeur1 est un texte
§ valeur2 est un texte
§ valeur3 est un texte
§ valeur4 est un texte
Actions :
Si nombre_case != 0 alors va vers Fenêtre_avertissement

valeur1 = valeur@choix_case_largeur
Tu convertis valeur1 en nombre_case_largeur
valeur2 = valeur@choix_case_hauteur
Tu convertis valeur2 en nombre_case_hauteur
valeur3 = valeur@choix_taille_largeur_case
Tu convertis valeur3 en taille_largeur_case
valeur4 = valeur@choix_taille_hauteur_case
Tu convertis valeur4 en taille_hauteur_case

nombre_case_largeur_effectif = entier ((largeur de fond - largeur de bordure_gauche) / taille_largeur_case)
nombre_case_hauteur_effectif = entier (hauteur de fond / taille_hauteur_case)
Si nombre_case_largeur_effectif >
nombre_case_largeur alors nombre_case_largeur_effectif = nombre_case_largeur
Si nombre_case_hauteur_effectif >
nombre_case_hauteur alors nombre_case_hauteur_effectif = nombre_case_hauteur
nombre_case = nombre_case_hauteur_effectif*nombre_case_largeur_effectif

visible de Fenêtre_nouveau_quadrillage vaut "non"

Tu vas vers Affichage_quadrillage

Affichage_quadrillage :
Rôles :
§ case est un rectangle, couleur vaut "blanc", hauteur vaut taille_hauteur_case, largeur vaut taille_largeur_case, position vaut 1, plein vaut "oui"
§ contour_case est un rectangle, couleur vaut "noir", hauteur vaut taille_hauteur_case, largeur vaut taille_largeur_case, position vaut 100, plein vaut "non"
xx est un nombre <
- (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case))/2) + largeur de bordure_gauche
yy est un nombre <
- (hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2
Actions :
("ici on dessine des cases pleines")
pour chaque nombre_case, lis
ajoute #case dans grille4
déplace grille4{joker} vers xx et yy
projette grille4{joker}
yy = yy + taille_hauteur_case
si yy est plus grand que (((hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2) + (nombre_case_hauteur_effectif * taille_hauteur_case)) - taille_hauteur_case alors lis
yy = (hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2
xx = xx + taille_largeur_case
ferme
si xx est plus grand que largeur de bordure_gauche + (nombre_case_largeur_effectif * taille_largeur_case) + ((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case)) alors lis
xx = (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case))/2) + largeur de bordure_gauche
ferme
ferme
xx = (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case))/2) + largeur de bordure_gauche
yy = (hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2

("ici on dessine le contour des cases")
pour chaque nombre_case, lis
ajoute #contour_case dans grille5
déplace grille5{joker} vers xx et yy
Projette grille5{joker}
yy = yy + taille_hauteur_case
si yy est plus grand que (((hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2) + (nombre_case_hauteur_effectif * taille_hauteur_case)) - taille_hauteur_case alors lis
yy = (hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2
xx = xx + taille_largeur_case
ferme
si xx est plus grand que largeur de bordure_gauche + (nombre_case_largeur_effectif * taille_largeur_case) + ((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case)) alors lis
xx = (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case))/2) + largeur de bordure_gauche
ferme
ferme

Réinitialisation :
Rôles :
§ indice est un nombre
Actions :
taille_largeur_case = 0
taille_hauteur_case = 0
nombre_case_largeur = 0
nombre_case_hauteur = 0
nombre_case_largeur_effectif = 0
nombre_case_hauteur_effectif = 0
nombre_case = 0

Mesure grille4 dans indice
pour chaque indice, lis
Efface (grille4{0})
tu ôtes (grille4{0}) de grille4
ferme
Mesure grille5 dans indice
pour chaque indice, lis
Efface (grille5{0})
tu ôtes (grille5{0}) de grille5
ferme


Efface la toile
Projette le fond & bordure_gauche
Va vers Générer_quadrillage
[/php]

Dans cet exemple, on dessine un quadrillage.
Si on retourne dans le menu "nouveau quadrillage", on peut alors effacer le quadrillage pour en dessiner un nouveau.
Or, la fonction "réinitialisation" va s'activer plusieurs fois jusqu'à faire planter le programme.
Je n'arrive pas à comprendre pourquoi un tel problème existe et comment je dois écrire mon code pour que mon programme fonctionne correctement.



J'ai testé ton exemple qui montre bien un problème... je travaille dessus !

descriptionpython - Linotte 1.7, les favoris et greffons en Python - Page 3 EmptyRE: Linotte 1.7, les favoris et greffons en Python

more_horiz
Bonjour Wam,

Donc, j'ai corrigé le problème mais je dois relivrer ce soir une nouvelle beta.

J'ai également modifié ton exemple afin qu'il initialise les fenêtres qu'une fois au début de ton livre.
[php]
Editeur de cartes :
Grands rôles :
("Fenêtre principale")
Fenêtre_principale est un formulaire, hauteur vaut 828, largeur vaut 800, titre vaut "Editeur de cartes"

("Fenêtre_avertissement")
Fenêtre_avertissement est un formulaire, hauteur vaut 110, largeur vaut 400, titre vaut "Attention", visible vaut "non", x vaut 450, y vaut 255, visible vaut "non"
txt_Fa1 est une étiquette, texte vaut "", x vaut 170, y vaut 10
txt_Fa2 est une étiquette, texte vaut "", x vaut 60, y vaut 30
bouton_valider_Fa est un bouton, texte vaut "Ok", x vaut 100, y vaut 80
bouton_annuler_Fa est un bouton, texte vaut "Annuler", x vaut 200, y vaut 80

("Fenêtre nouveau quadrillage")
Fenêtre_nouveau_quadrillage est un formulaire, hauteur vaut 140, largeur vaut 300, titre vaut "Nouveau quadrillage", visible vaut "non", x vaut 450, y vaut 255, visible vaut "non"
txt_Fnq1 est une étiquette, texte vaut "Nombre de cases en largeur :", x vaut 10, y vaut 10
txt_Fnq2 est une étiquette, texte vaut "Nombre de cases en hauteur :", x vaut 10, y vaut 30
txt_Fnq3 est une étiquette, texte vaut "Largeur des cases :", x vaut 10, y vaut 50
txt_Fnq4 est une étiquette, texte vaut "Hauteur des cases :", x vaut 10, y vaut 70
choix_case_largeur est un sélecteur, valeurs vaut "", x vaut 200, y vaut 10
choix_case_hauteur est un sélecteur, valeurs vaut "", x vaut 200, y vaut 30
choix_taille_largeur_case est un sélecteur, valeurs vaut "", x vaut 200, y vaut 50
choix_taille_hauteur_case est un sélecteur, valeurs vaut "", x vaut 200, y vaut 70
bouton_valider_Fnq est un bouton, texte vaut "Valider", x vaut 70, y vaut 110
bouton_annuler_Fnq est un bouton, texte vaut "Annuler", x vaut 160, y vaut 110

("Menus")
menu2 est un menu, texte vaut "Carte"
menu2s1 est un sousmenu, texte vaut "Nouveau quadrillage"

("Toile")
fond est une toile, hauteur vaut 800, largeur vaut 800, couleur vaut "blanc", pointeur vaut "flèche"
xtoile est une xtoile, x vaut 0, y vaut 0
bordure_gauche est un rectangle, x = 0, y = 0, position vaut 1, hauteur vaut hauteur de fond, largeur vaut 150, plein vaut "oui", couleur vaut "blanc"

("Quadrillage")
taille_largeur_case est un nombre
taille_hauteur_case est un nombre
nombre_case_largeur est un nombre
nombre_case_hauteur est un nombre
nombre_case_largeur_effectif est un nombre
nombre_case_hauteur_effectif est un nombre
nombre_case est un nombre

grille4 est un casier de rectangle
grille5 est un casier de rectangle

Fenêtre_principale :
Rôles :
Actions :
("Construire toutes les fenêtres :")
Tu ajoutes txt_Fa1 & txt_Fa2 & bouton_valider_Fa & bouton_annuler_Fa dans Fenêtre_avertissement
texte de txt_Fa1 vaut "Attention" ;
x de txt_Fa1 vaut 170 ;
y de txt_Fa1 vaut 10
texte de txt_Fa2 vaut "Toutes vos données vont être effacées" ;
x de txt_Fa2 vaut 85 ;
y de txt_Fa2 vaut 30
Tu fais réagir Fenêtre_avertissement à "clic souris" pour Fermer_fenêtre_avertissement
Tu fais réagir bouton_valider_Fa à "clic souris" pour Fermer_fenêtre_avertissement
Tu fais réagir bouton_valider_Fa à "clic souris" pour Réinitialisation
Tu fais réagir bouton_annuler_Fa à "clic souris" pour Fermer_fenêtre_avertissement
Tu fais réagir bouton_annuler_Fa à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage
Tu ajoutes txt_Fnq1 & txt_Fnq2 & txt_Fnq3 & txt_Fnq4 & choix_case_largeur & choix_case_hauteur & choix_taille_largeur_case & choix_taille_hauteur_case & bouton_valider_Fnq & bouton_annuler_Fnq dans Fenêtre_nouveau_quadrillage
Tu fais réagir Fenêtre_nouveau_quadrillage à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage
Tu fais réagir bouton_annuler_Fnq à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage
Tu fais réagir bouton_valider_Fnq à "clic souris" pour Générer_quadrillage

("Début du programme :")
Tu ajoutes xtoile dans Fenêtre_principale
visible de Fenêtre_principale vaut "oui"
Tu ajoutes menu2 dans Fenêtre_principale
Tu ajoutes menu2s1 dans menu2
Tu fais réagir Fenêtre_principale à "clic souris" pour Fermer_fenêtre_principale
Tu fais réagir menu2s1 à "clic souris" pour Fenêtre_nouveau_quadrillage

Efface la toile
Projette le fond & bordure_gauche

tant que 1 est différent de 2, lis
temporise
ferme

Fenêtre_avertissement :
Rôles :
Actions :
visible de Fenêtre_avertissement vaut "oui"

Fenêtre_nouveau_quadrillage :
Rôles :
§ i est un nombre
§choix est un casier de texte
Actions :
visible de Fenêtre_nouveau_quadrillage vaut "oui"
Pour i de 1 à 100, lis
Tu ajoutes ""+i dans choix
Tu fermes
évoque choix_case_largeur.chargevaleurs(choix)
évoque choix_case_hauteur.chargevaleurs(choix)
évoque choix_taille_largeur_case.chargevaleurs(choix)
évoque choix_taille_hauteur_case.chargevaleurs(choix)
reviens

Fermer_fenêtre_principale :
Rôles :
*f :: formulaire
Actions :
Efface la toile
Tu termines

Fermer_fenêtre_avertissement :
Rôles :
Actions :
visible de Fenêtre_avertissement vaut "non"
Tu reviens

Fermer_fenêtre_nouveau_quadrillage :
Rôles :
Actions :
visible de Fenêtre_nouveau_quadrillage vaut "non"
Tu reviens

Générer_quadrillage :
Rôles :
§ valeur1 est un texte
§ valeur2 est un texte
§ valeur3 est un texte
§ valeur4 est un texte
Actions :
Si nombre_case != 0 alors va vers Fenêtre_avertissement

valeur1 = valeur@choix_case_largeur
Tu convertis valeur1 en nombre_case_largeur
valeur2 = valeur@choix_case_hauteur
Tu convertis valeur2 en nombre_case_hauteur
valeur3 = valeur@choix_taille_largeur_case
Tu convertis valeur3 en taille_largeur_case
valeur4 = valeur@choix_taille_hauteur_case
Tu convertis valeur4 en taille_hauteur_case

nombre_case_largeur_effectif = entier ((largeur de fond - largeur de bordure_gauche) / taille_largeur_case)
nombre_case_hauteur_effectif = entier (hauteur de fond / taille_hauteur_case)
Si nombre_case_largeur_effectif >
nombre_case_largeur alors nombre_case_largeur_effectif = nombre_case_largeur
Si nombre_case_hauteur_effectif >
nombre_case_hauteur alors nombre_case_hauteur_effectif = nombre_case_hauteur
nombre_case = nombre_case_hauteur_effectif*nombre_case_largeur_effectif

visible de Fenêtre_nouveau_quadrillage vaut "non"

Tu vas vers Affichage_quadrillage

Affichage_quadrillage :
Rôles :
§ case est un rectangle, couleur vaut "blanc", hauteur vaut taille_hauteur_case, largeur vaut taille_largeur_case, position vaut 1, plein vaut "oui"
§ contour_case est un rectangle, couleur vaut "noir", hauteur vaut taille_hauteur_case, largeur vaut taille_largeur_case, position vaut 100, plein vaut "non"
xx est un nombre <
- (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case))/2) + largeur de bordure_gauche
yy est un nombre <
- (hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2
Actions :
("ici on dessine des cases pleines")
pour chaque nombre_case, lis
ajoute #case dans grille4
déplace grille4{joker} vers xx et yy
projette grille4{joker}
yy = yy + taille_hauteur_case
si yy est plus grand que (((hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2) + (nombre_case_hauteur_effectif * taille_hauteur_case)) - taille_hauteur_case alors lis
yy = (hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2
xx = xx + taille_largeur_case
ferme
si xx est plus grand que largeur de bordure_gauche + (nombre_case_largeur_effectif * taille_largeur_case) + ((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case)) alors lis
xx = (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case))/2) + largeur de bordure_gauche
ferme
ferme
xx = (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case))/2) + largeur de bordure_gauche
yy = (hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2

("ici on dessine le contour des cases")
pour chaque nombre_case, lis
ajoute #contour_case dans grille5
déplace grille5{joker} vers xx et yy
Projette grille5{joker}
yy = yy + taille_hauteur_case
si yy est plus grand que (((hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2) + (nombre_case_hauteur_effectif * taille_hauteur_case)) - taille_hauteur_case alors lis
yy = (hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2
xx = xx + taille_largeur_case
ferme
si xx est plus grand que largeur de bordure_gauche + (nombre_case_largeur_effectif * taille_largeur_case) + ((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case)) alors lis
xx = (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case))/2) + largeur de bordure_gauche
ferme
ferme

Réinitialisation :
Rôles :
§ indice est un nombre
Actions :
"Réinitialisation" !
taille_largeur_case = 0
taille_hauteur_case = 0
nombre_case_largeur = 0
nombre_case_hauteur = 0
nombre_case_largeur_effectif = 0
nombre_case_hauteur_effectif = 0
nombre_case = 0

Mesure grille4 dans indice
pour chaque indice, lis
Efface (grille4{0})
tu ôtes (grille4{0}) de grille4
ferme
Mesure grille5 dans indice
pour chaque indice, lis
Efface (grille5{0})
tu ôtes (grille5{0}) de grille5
ferme


Efface la toile
Projette le fond & bordure_gauche
Va vers Générer_quadrillage
[/php]

La correction de ce soir autorise à avoir des formulaires (visible vaut "non")fermés au début du livre.

descriptionpython - Linotte 1.7, les favoris et greffons en Python - Page 3 EmptyRE: Linotte 1.7, les favoris et greffons en Python

more_horiz
La nouvelle version beta est en cours de construction ,elle devrait arriver d'ici 30 minutes !

descriptionpython - Linotte 1.7, les favoris et greffons en Python - Page 3 EmptyRE: Linotte 1.7, les favoris et greffons en Python

more_horiz
bonjour,

Je vais avancer la sortir de la version 1.7 à début juin.

Il reste le bogue lié à la pipette remonté Wam mais il sera corrigé en parallèle car c'est un greffon.

D'autres bogues à me remonter ?

Cpc

descriptionpython - Linotte 1.7, les favoris et greffons en Python - Page 3 EmptyRE: Linotte 1.7, les favoris et greffons en Python

more_horiz
Cool, la sortie de la version 1.7 est avancée x)

Pour ce qui concerne le problème d'initialisation des évènements, la solution retenue sera donc d'initialiser tous les évènements au début du livre ?
C'est à dire ajouter et faire réagir tous les éléments de toutes les fenêtres dans le même paragraphe ?
Car, personnellement, je préfèrerais pouvoir construire mes fenêtres dans des paragraphes séparés, comme ceci :

[php]
Fenêtre_principale :
Rôles :
Actions :
Tu ajoutes xtoile dans Fenêtre_principale
visible de Fenêtre_principale vaut "oui"
Tu ajoutes menu1 dans Fenêtre_principale
Tu ajoutes menu1s1 & menu1s2 & menu1s3 dans menu1
Tu ajoutes menu2 dans Fenêtre_principale
Tu ajoutes menu2s1 & menu2s2 & menu2s3 & menu2s4 & menu2s5 dans menu2
Tu ajoutes menu3 dans Fenêtre_principale
Tu ajoutes menu3s1 & menu3s2 & menu3s3 dans menu3
Tu fais réagir Fenêtre_principale à "clic souris" pour Fermer_fenêtre_principale
Tu fais réagir menu1s1 à "clic souris" pour Affichage_toile
Tu fais réagir menu1s1 à "clic souris" pour Affichage_tileset
Tu fais réagir menu1s2 à "clic souris" pour Test_tileset
Tu fais réagir menu1s3 à "clic souris" pour Enregistrer_tileset
Tu fais réagir menu2s1 à "clic souris" pour Fenêtre_nouveau_quadrillage
Tu fais réagir menu2s2 à "clic souris" pour Ouvrir
Tu fais réagir menu2s3 à "clic souris" pour Enregistrer
Tu fais réagir menu2s4 à "clic souris" pour Enregistrer_sous
Tu fais réagir menu2s5 à "clic souris" pour Sauvegarde_automatique
Tu fais réagir menu3s1 à "clic souris" pour Edition_annuler
Tu fais réagir menu3s2 à "clic souris" pour Edition_rétablir
Tu fais réagir menu3s3 à "clic souris" pour Edition_supprimer

tant que 1 est différent de 2, lis
temporise
ferme

Fenêtre_découpage_tileset :
Rôles :
§ i est un nombre
Actions :
visible de Fenêtre_découpage_tileset vaut "oui"
Tu ajoutes txt_Fdt1 & txt_Fdt2 & txt_Fdt3 & txt_Fdt5 & txt_Fdt6 & choix_largeur_case & choix_hauteur_case & choix_nombre_cases_largeur & choix_nombre_cases_hauteur & case_tout_quadriller_Fdt & case_non_quadriller_Fdt & bouton_valider_Fdt & bouton_découper_Fdt dans Fenêtre_découpage_tileset
Tu fais réagir Fenêtre_découpage_tileset à "clic souris" pour Fermer_fenêtre_découpage_tileset
Tu fais réagir case_tout_quadriller_Fdt à "clic souris" pour Quadriller_tout
Tu fais réagir case_non_quadriller_Fdt à "clic souris" pour Ne_pas_quadriller
Tu fais réagir bouton_valider_Fdt à "clic souris" pour Générer_quadrillage_tileset
Tu fais réagir bouton_découper_Fdt à "clic souris" pour Effacer_tileset

Pour i de 5 à 100, lis
Tu ajoutes i +"|" dans valeurs@choix_largeur_case
Tu ajoutes i +"|" dans valeurs@choix_hauteur_case
Tu fermes
Pour i de 1 à 100, lis
Tu ajoutes i +"|" dans valeurs@choix_nombre_cases_largeur
Tu ajoutes i +"|" dans valeurs@choix_nombre_cases_hauteur
Tu fermes

Fenêtre_nouveau_quadrillage :
Rôles :
§ i est un nombre
Actions :
visible de Fenêtre_nouveau_quadrillage vaut "oui"
Tu ajoutes txt_Fnq1 & txt_Fnq2 & txt_Fnq3 & txt_Fnq4 & choix_case_largeur & choix_case_hauteur & choix_taille_largeur_case & choix_taille_hauteur_case & bouton_valider_Fnq & bouton_annuler_Fnq dans Fenêtre_nouveau_quadrillage
Tu fais réagir Fenêtre_nouveau_quadrillage à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage
Tu fais réagir bouton_annuler_Fnq à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage
Tu fais réagir bouton_valider_Fnq à "clic souris" pour Générer_quadrillage

Pour i de 1 à 100, lis
Tu ajoutes i +"|" dans valeurs@choix_case_largeur
Tu ajoutes i +"|" dans valeurs@choix_case_hauteur
Tu ajoutes i +"|" dans valeurs@choix_taille_largeur_case
Tu ajoutes i +"|" dans valeurs@choix_taille_hauteur_case
Tu fermes
[/php]

Ceci est ma façon personnelle de programmer L'IHM, que je trouve plus lisible.

Bien entendu, ce n'est qu'une question d'habitude, et j'adapterai ma façon de coder l'IHM au Linotte x)

Sinon, avec la sortie de la 1.7, pourra-t-on afficher plusieurs toiles ?
Car pouvoir afficher plusieurs fenêtres contenant chacune leur xtoile est primordial pour la suite de mon programme.

descriptionpython - Linotte 1.7, les favoris et greffons en Python - Page 3 EmptyRE: Linotte 1.7, les favoris et greffons en Python

more_horiz
Il est mieux d'initialiser tous les évènements au début d'un programme... c'est la meilleur des méthodes car elle est plus clair au niveau de ton programme car tu construis ton application graphique au début de ton programme et aussi au niveau des performances, c'est fait une seule fois !

Ce modèle de programmation est le modèle MVC (Modèle-Vue-Contrôleur):
Dans le modèle MVC, la gestion des évènements est le contrôleur : http://fr.wikipedia.org/wiki/Mod%C3%A8l ... .C3.B4leur

Tes fenêtres sont "la vue".

Plus d'information ici :
http://www.siteduzero.com/tutoriel-3-31 ... e-mvc.html

descriptionpython - Linotte 1.7, les favoris et greffons en Python - Page 3 EmptyRE: Linotte 1.7, les favoris et greffons en Python

more_horiz
Ce sujet est clos...
La version 1.7 est maintenant officielle : http://langagelinotte.free.fr/wordpress/?p=254

descriptionpython - Linotte 1.7, les favoris et greffons en Python - Page 3 EmptyRE: Linotte 1.7, les favoris et greffons en Python

more_horiz
GG

descriptionpython - Linotte 1.7, les favoris et greffons en Python - Page 3 EmptyRE: Linotte 1.7, les favoris et greffons en Python

more_horiz
Pour la traduction de "GG" : http://fr.wikipedia.org/wiki/Gg
<img src=" title="Big Grin" />
Merci Zamirh

descriptionpython - Linotte 1.7, les favoris et greffons en Python - Page 3 EmptyRe: Linotte 1.7, les favoris et greffons en Python

more_horiz
privacy_tip Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
power_settings_newSe connecter pour répondre