Partage
  • Partager sur Facebook
  • Partager sur Twitter

importé un class

[python]

    12 mai 2006 à 15:44:43

    Bonjour,
    j'éssaille de me familiariser avec les class pour rendre mes scriptes plus fonctionnels.
    Afin de comprendre leurs fonctionnements, j'ai composé deux scriptes simples:
    le premier: principale.py

    from Tkinter import*
    from creation import *

    class debut:
        def __init__(s):
            s.f=Tk()
            s.can=Canvas(s.f,width=100,height=100)
            s.b=Button(s.f,text="nex",command=s.n)
            s.can.pack()
            s.b.pack()
            s.f.mainloop()
           
        def n(s):
           
            a=ball()
            a.new()
           
    debut()


    et le second: creation.py

    from Tkinter import*

    class ball:
       
        def new(s):
            s.can.create_ovale(50,50,60,60,fill='blue')


    mais voilà: quand je clic sur nex, on me previen qu'à la ligne
    s.can.create_ovale(50,50,60,60,fill='blue')

    can n'est pas définie.

    Comment puis je faire ?

    merci a+
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      12 mai 2006 à 17:35:55

      Envoie tout ton code. S'il est trop gros, héberge le ailleurs.
      • Partager sur Facebook
      • Partager sur Twitter
        12 mai 2006 à 18:18:09

        mais c'est tous mon code :p (deux different)
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          12 mai 2006 à 20:29:54

          Ah oui pardon. Oui c'est que tu sais pas utiliser tout ça :p


          Quand tu cliques sur 'nex', effectivement la méthode n est appelée (une méthode est une fonction appartenant à un objet, du moins en résumé). Ca, ca marche.

          Ce que tu ne sais pas, c'est que (pour des raisons liées au fonctionement de Tkinter), l'argument transmis à n sera un évenement. Note que Swinnen en parle dans son cours.

          Ensuite, autre problème : quand tu utilises la méthode new de la classe ball, tu ne lui passes pas d'argument. Elle en a un, qui est nécessaire : s, qui désigne l'objet lui-même. En effet, et c'est pourquoi d'habitude on met "self" ("soi-même", dans ce contexte) à la place de "s", à chaque fois que tu appelles une méthode avec un code comme

          objet.methode()

          cette dernière reçoit automatiquement le nom de l'objet. Cela lui permet de se désigner lui-même.


          *Bref*, ce que tu veux/dois faire, c'est passer un deuxième argument à new. Je n'en dis pas plus, mais si tu as besoin d'aide, ou d'explications de meilleures qualité... j'essaierai toujours.
          • Partager sur Facebook
          • Partager sur Twitter
            13 mai 2006 à 7:31:51

            je crois que j'ai deja essaillé en faisant comme ceci:

            a.new(s.can)


            et en recuperant s.can dans l'autre code
            mais cela ne marche pas non plus


            (en gros si je fais cela c'est pour pouvoir par la suite utiliser les thread dans differentes class qui "dialogues" entres elles en evoyant des données ou modiffiant des valeurs comme je tente de faire)


            a++
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              13 mai 2006 à 8:42:04

              Pas s.can, vu que ce que tu attends dans la méthode new, c'est un objet avec une propriété can.

              Je vais pas te donner le code tout fait.
              • Partager sur Facebook
              • Partager sur Twitter

              importé un class

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown