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

Python Discussion :

Problème Python 2.7 Tkinter


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    terminale S
    Inscrit en
    Juillet 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : terminale S

    Informations forums :
    Inscription : Juillet 2012
    Messages : 27
    Points : 17
    Points
    17
    Par défaut Problème Python 2.7 Tkinter
    Bonjour, je suis débutant en python et suis actuellement l'excellent cours Python Apprendre à programmer avec Python 3 par Gérard Swinnen disponible sur ce site.

    Donc j'en suis au chapitre 8.3.1 : l'exercice sur les tracé de ligne.
    http://python.developpez.com/cours/T...page_10#L8.3.1
    J'ai donc copier le code donné dans le cours pour le collé dans pyscripter.

    Quand je le lance, tout s'affiche correctement, les objets sont placé ou il faut etc. Mais quand je clique sur "tracer une ligne" Pyscripter me dit :

    Exception in Tkinter callback
    Traceback (most recent call last):
    File "C:\Python27\Lib\lib-tk\Tkinter.py", line 1410, in __call__
    return self.func(*args)
    File "<module1>", line 19, in drawline
    NameError: global name 'can1' is not defined


    Je ne comprend pas pourquoi puisque j'ai directement c/c le code du cours.

    Merci d'avance

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Le code fonctionnant très bien, on peut suspecter que votre "cut&paste" n'est pas si "propre". Sans montrer le code difficile d'être plus précis.

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

  3. #3
    Membre à l'essai
    Homme Profil pro
    terminale S
    Inscrit en
    Juillet 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : terminale S

    Informations forums :
    Inscription : Juillet 2012
    Messages : 27
    Points : 17
    Points
    17
    Par défaut
    Ah Ah, il faut croire que ta réponse m'a porté chance, en la lisant, j'ai refait mon copier/coller, et j'ai collé en tant que tel, sans mettre le "def main (): "
    Le programme marche ainsi. merci.

    En revanche, j'ai toujours appris qu'il fallait definir les fonctions du programme en dehors du "def main ():" et mettre les instruction principal dedans.
    Pourquoi il n'y en pas besoin ici ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par nicolivier Voir le message
    En revanche, j'ai toujours appris qu'il fallait definir les fonctions du programme en dehors du "def main ():" et mettre les instruction principal dedans.
    Je suis perplexe quant au sens de "toujours" pour un élève de Terminale.

    Si vous encapsulez les instructions du script dans une fonction, genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def main():
        # Création du widget principal ("maître") :
        fen1 = Tk()
        # création des widgets "esclaves" :
        can1 = Canvas(fen1,bg='dark grey',height=200,width=200)
        can1.pack(side=LEFT)
        ...
    fen1 et can1 deviennent des variables "locales" à la fonction main.
    => can1 ne sera plus accessible/visible par drawline.

    Une construction courante en Python serait plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if __name__ == '__main__':
        # Création du widget principal ("maître") :
        fen1 = Tk()
        # création des widgets "esclaves" :
        can1 = Canvas(fen1,bg='dark grey',height=200,width=200)
        can1.pack(side=LEFT)
        ...
    Cela permet d'utiliser le script en tant que tel (le lancer) ou en tant que "module" i.e. faire import du script.
    Un des intérêts de définir, en plus, une fonction "main" serait d'en faire un point d'entrée "générique": une fois "importé" quelle fonction appeler pour que cela lance la mini-application associée.
    => différencier ce qui sera dans la fonction et ce qui resterait sous le "if __name__ == '__main__':" est un exercice intéressant.

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

  5. #5
    Membre à l'essai
    Homme Profil pro
    terminale S
    Inscrit en
    Juillet 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : terminale S

    Informations forums :
    Inscription : Juillet 2012
    Messages : 27
    Points : 17
    Points
    17
    Par défaut
    Je veux dire par "toujous" depuis le début d'année

    Merci de m'avoir expliqué si rapidement , même si quelques notions m'échappent encore.

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

Discussions similaires

  1. [Python 3.X] Problème Python + Tkinter
    Par sylyako dans le forum Général Python
    Réponses: 1
    Dernier message: 10/05/2015, 13h37
  2. Problème de commandes sur Tkinter (Python)
    Par Inariuss dans le forum Général Python
    Réponses: 4
    Dernier message: 14/05/2014, 20h03
  3. Problème avec PyDEV et Tkinter
    Par divpload dans le forum EDI/RAD
    Réponses: 1
    Dernier message: 15/06/2009, 19h25
  4. [2 problèmes PYTHON] Interprétation IDLE + chaines
    Par devatt dans le forum Général Python
    Réponses: 9
    Dernier message: 25/02/2009, 19h37
  5. Problèmes python avec Internet explorer
    Par pascalcovolo dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 27/06/2008, 13h42

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