IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Programme qui fonctionne uniquement avec une erreur [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2020
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2020
    Messages : 24
    Points : 20
    Points
    20
    Par défaut Programme qui fonctionne uniquement avec une erreur
    Bonjour, j'ai fait un programme qui fonctionne uniquement lorsqu'il y a une erreur, ça me semble vraiment très étrange et ça fait 2 jours que je cherche, en vain, une solution je vous met les images en pièce jointe.

    Le premier programme (image 2) se termine par a=a et il créé l'erreur de la première image.
    Le deuxième (image 3) est identique mais fini par a=i ne crée pas d'erreur mais ne fonctionne pas.

    Contexte : La fonction Créer_liste_sécurité créée une liste contenant 3 liste, chacune de ces trois liste contient un nombre indéfini à l'avance (mais le même nombre pour chacune) de mots.
    Sécurité bouton image créée une liste avec une image contenant le nom du mot correspondant dans la première des 3 listes
    puis le for i in range(): sert à afficher des Label avec chacune des images,
    le deuxième for i in range(): sert à créer l'erreur (j'ai l'impression qu'il faut qu'il charge la place len(Liste)+1 (qui est innexistante) pour réussir à afficher le résultat souhaité (que tout les boutons s'affichent))

    Merci d'avance, Léo
    Images attachées Images attachées    

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 781
    Points
    36 781
    Par défaut
    Salut,

    Si vous ne faites par l'effort de réduire votre code pour poster juste de quoi reproduire le problème, pas sûr qu'on puisse vous aider.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 301
    Points : 6 781
    Points
    6 781
    Par défaut
    Salut,

    Épargne nous ces captures dont on ne comprend pas le sens.

    Si ton code échoue sur une erreur, tu copie-colle ici, dans des balises code, le traceback complet de cette erreur et bien-sur le code qui déclenche cette erreur.

  4. #4
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 609
    Points : 2 073
    Points
    2 073
    Par défaut
    Et enlève ces saloperies d'accents dans tes noms de variables et fonctions
    Pas d'aide par mp.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2020
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2020
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    @VinsS Le problème c'est que lorsqu'il y a une erreur (peu importe laquelle) le code fonctionne et lorsqu'il n'y en a plus, il ne fonctionne plus.

    Par exemple si je rajoute a=a, ça fonctionne, si je remplace par a=0, ça ne marche plus
    Si je met L=[0,5,2] puis print(L[32]), ça fonctionne mais si je remplace print(L[32]) par print(L[1]), ça ne marche plus

    Je sais que ça semble vraiment bizarre mais c'est pour vous expliquer ça que j'ai mis les images.

    PS : Si on peut m'expliquer pourquoi les accents c'est mal, ça serait sympa parce que tout le monde me dit ça mais j'ai vu que Python 3 réglait tout les problème d'accent

  6. #6
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 609
    Points : 2 073
    Points
    2 073
    Par défaut
    Tes explications ne font pas avancer le scmillblick.
    P.S. Il y en a qui ont essayé, ils ont eu des problèmes.
    Pas d'aide par mp.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2020
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2020
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    Et bien si je fais a=a j'ai UnboundLocalError: local variable 'a' referenced before assignment, si je fais print(L[32]), j'ai IndexError: list index out of range, si je fais raise() j'ai TypeError: exceptions must derive from BaseException, etc...

    Par contre si je met print("yo) j'ai SyntaxError: EOL while scanning string literal mais le programme ne fonctionne pas

  8. #8
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 609
    Points : 2 073
    Points
    2 073
    Par défaut
    Comme tu ne mets toujours pas ton programme, difficile de comprendre.
    Déjà, a = a, je ne vois pas trop l'intérêt.
    Ensuite si lui dis a = b et que b n'a pas été défini avant, cela plante.
    Sur ce, si tu ne mets pas des choses plus claires, je lâche l'affaire. Bonne nuit.
    Pas d'aide par mp.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2020
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2020
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    Justement, quand je met a=b, ça fonctionne mais en mettant l'erreur, je te met le programme (le problème est à la ligne 65 de Léo-Python) est pour voir si le programme marche il faut cliquer sur le logo bleu.
    J'ai prévu de retirer les accents demain après-midi je te tiens au courant si ça corrige quoi que ce soit. Si tu veux tester sans erreur, il faut enlever le raise() de la ligne 72.

    Merci beaucoup pour le temps que tu m'accordes, je reste à ton écoute, Léo-Team Online

    PS: Il faut l'ouvrir avec un IDE ou en changeant l'extension car .pyw n'ouvre pas la console et on a l'impression que tout fonctionne

    PPS: Ce que j'appelle fonctionner c'est quand le nom des logiciels apparaissent après avoir cliqué sur le bouton bleu (le programme ne fait pas grand chose d'autre pour l'instant)

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 781
    Points
    36 781
    Par défaut
    Salut,

    Problème: il manque des tas de fichiers pour pouvoir lancer votre programme.

    Après, si vous ne faites pas l'effort d'enlever ce qui n'a rien à voir avec la reproduction du problème, c'est que vous même n'avez pas essayé d'identifier le problème (ou que vous ne savez pas que la chasse au problème commence par là).

    La plupart du temps, ce n'est pas grave (avec du temps on s'en sort). Ici, c'est contre productif: il n'y a pas de raison pour que vous ayez le comportement constaté, il est probable que ce soit un effet de bord de la conception et de la réalisation de votre code.
    Réduire à tâtons va prendre un temps fou, et la lecture d'un code mal écrit (*) n'est pas aisée.

    (*) ce n'est pas un reproche, vous codez en fonction de ce que vous savez. Néanmoins mettez vous à la place de ceux qui vont prendre le temps de lire ce code. Ils vont essayer de dérouler les différentes instructions comme le ferait l'interpréteur Python... avec beaucoup moins de patience lorsqu'ils liront des constructions bancales et perdront le fil.

    Ceci dit, ce n'est que mon opinion: si dans 2/3 jours personne ne revient avec une idée géniale, vous savez ce que vous avez à faire.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2020
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2020
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    J'ai beaucoup simplifié le programme tout en isolant l'erreur, je l'ai mis dans un .rar, il faut que vous changiez une ligne en fonction de l'endroit ou vous faites "extraire Erreur Python.rar".

    Dites moi si il y a autre chose à faire.
    Images attachées Images attachées  

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 781
    Points
    36 781
    Par défaut
    Salut,

    Le code intéressant est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def test_clic(a):
        Liste=[["Gmail","Discord","Snapchat","Aucun_logiciel"],[]] #Je n'ai mis que 4 nom mais le vrai programme va chercher une liste dans un fichier stocké sur l'ordi
        Liste_image=[] #dans le vrai programme il y a 4 liste dans liste image pour avoir une image en fonction de l'état du bouton
     
        for i in range(len(Liste[0])):
            Liste_image.append(PhotoImage(file=Liste[0][i]+"_base.png")) #Il faut remplacer par l'emplacement ou vous avez extrait le .rar
     
        for i in range(len(Liste[0])):
            Liste[1].append(Label(Fenetre,image=Liste_image[i]))
            Liste[1][i].pack()
        raise() #Si on enlève cette ligne, il n'y a plus d'erreur mais le programme ne fonctionne plus
    Le débutant pose généralement d'autres questions: pourquoi mes images n’apparaissent pas lorsque les images sont créées dans une fonction? La réponse est plusieurs fois dans la FAQ et même documentée.

    Pourquoi les images apparaissent lorsque la fonction sort en exception et n'apparaissent pas sinon est une variante que je n'avais jamais entendue.

    Le problème est "simple", une image (comme une variable) tkinter est un objet qui existe tant qu'il y aura une référence dessus (les widgets gardent une référence "interne").

    Ici, ces références sont stockées dans Liste_image. A la fin de la fonction, la liste est détruite (et les images aussi). Pour qu'elle survive, il faut une liste "globale".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/04/2015, 07h05
  2. [MySQL] Function avec mysqli fonctionne uniquement avec une ouverture de connexion à chaque appel
    Par Nathalie77 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 20/03/2015, 13h56
  3. [AJAX] xmlhttprequest.send qui ne fonctionne pas avec une variable !
    Par hoaxpunk dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/03/2009, 18h17
  4. LIKE qui ne fonctionne pas avec une espace
    Par CinePhil dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/10/2008, 16h46
  5. un For Each qui ne fonctionne pas avec une collection maison !
    Par grenouillesiverte dans le forum Windows Forms
    Réponses: 7
    Dernier message: 01/09/2007, 21h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo