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 :

inseré chiffre dans Canvas


Sujet :

Python

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2013
    Messages : 8
    Par défaut inseré chiffre dans Canvas
    Bonjour

    Je demande votre aide car je n'arrive pas à inserer un chiffre dans chaqu'une des cases de ce quadrillage

    je dois arriver à faire par exemple :
    111
    222
    333

    Code:

    from Tkinter import *

    root = Tk()
    w = Canvas(root, width=600,height=600)
    w.pack()

    for hx in range(0,600,200):
    w.create_line(0,hx,600,hx,fill="blue")

    for hy in range(0,600,200):
    w.create_line(hy,0,hy,600,fill="blue")

    root.mainloop()


    Merci d'avance

  2. #2
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Puisque vous connaissez create_line vous devez connaître create_text : Ou est le problème ?

    @+

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2013
    Messages : 8
    Par défaut
    le problème c'est que ca ne marche pas le code que je fais :/
    et je ne sais pas où mettre le create_text

  4. #4
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 305
    Par défaut
    Salut,

    Comme tu connais les dimensions de ta grille, tu peux calculer les coordonnées des textes et TKinter centrera lui-même le texte sur ce point.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    w.create_text(50, 50, text='111')
    placera le texte '111' à la position x = 50, y = 50


    Un conseil, quand tu postes du code utilisse les balises du même nom.

  5. #5
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2013
    Messages : 8
    Par défaut
    Merci pour ton aide

    encore une petite chose

    si je veux insere ce code dans mon premier code 'canvas' comment puis-je faire ? pour que chaque chiffre entre dans une casse (je sais qu'il y a trop de chiffre pour le nombre de cases mais je ferai cette modification par après)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    >>> import random
    >>> a=[1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2]
    >>> len(a)
    21
    >>> a=a+[1,1,1,1]
    >>> a
    [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1]
    >>> len(a)
    25
    >>> random.shuffle(a)
    >>> a
    [1, 1, 2, 1, 2, 1, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2]
    >>> random.shuffle(a)
    >>> a
    [1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 2, 2, 1]

  6. #6
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 305
    Par défaut
    Ben, je vois pas trop le rapport entre ta representation dans des cases et le module random, mais bon.

    Disons que tu as une liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    a = [1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 2, 2, 1]
    et que tes cases font 20 x 20 pixels avec dix cases horizontalement, tu peux itérer sur ta liste comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    # Le centre de la première case
    w, h = 10, 10
    # On itère
    for i, val in enumerate(a):
        # Ce print pour que tu voies ce que fait enumerate()
        print i, '>', val
        w.create_text(w, h, text=str(val))
        # On vérifie si on est arrivé à la derniere case horizontale
        if i % 9 == 0:
            w, h = 20, h + 20
        else:
            h + 20
    J'ai pas testé, mais ça devrait le faire

  7. #7
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2013
    Messages : 8
    Par défaut
    Merci Bien je teste ca des que je rentre

  8. #8
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2013
    Messages : 8
    Par défaut
    ca me dit :

    0 > 1

    Traceback (most recent call last):
    File "C:/Users/Marine/Desktop/moiiii", line 21, in <module>
    w.create_text(w, h, text=str(val))
    AttributeError: 'int' object has no attribute 'create_text'


    Quand je met ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    from Tkinter import *
     
    root = Tk()
    w = Canvas(root, width=600,height=600)
    w.pack()
     
    for hx in range(0,600,60):
        w.create_line(0,hx,600,hx,fill="blue")
     
    for hy in range(0,600,60):
        w.create_line(hy,0,hy,600,fill="blue")
     
    a = [1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 2, 2, 1]
     
    # Le centre de la première case
    w, h = 10, 10
    # On itère
    for i, val in enumerate(a):
        # Ce print pour que tu voies ce que fait enumerate()
        print i, '>', val
        w.create_text(w, h, text=str(val))
        # On vérifie si on est arrivé à la derniere case horizontale
        if i % 9 == 0:
            w, h = 20, h + 20
        else:
            h + 20
     
    root.mainloop()

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 699
    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 699
    Par défaut
    Salut,

    Intuitivement vous vous rendez compte que si l'instruction "w.create_text(w, h, text=str(val))" contient 2 "w", l'interpréteur fera ce qu'il peut mais pas ce que vous vouliez.
    Vous vous rendez compte si vous avez besoin de variables "temporaires", il va falloir trouver un truc pour ne pas réutiliser les noms des variables "globales".
    Ca passe par un découpage en fonctions qui permettre d'isoler les "noms".
    En forçant le trait, votre code deviendrait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    from Tkinter import *
     
    def create_lines(canvas):
        for hx in range(0,600,60):
            canvas.create_line(0,hx,600,hx,fill="blue")
     
        for hy in range(0,600,60):
            canvas.create_line(hy,0,hy,600,fill="blue")
     
    def create_text(canvas):
        a = [1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 2, 2, 1]
     
        # Le centre de la première case
        w, h = 10, 10
        # On itère
        for i, val in enumerate(a):
            # Ce print pour que tu voies ce que fait enumerate()
            print (i, '>', val)
            canvas.create_text(w, h, text=str(val))
            # On vérifie si on est arrivé à la derniere case horizontale
            if i % 9 == 0:
                w, h = 20, h + 20
            else:
                h + 20
     
    if __name__ == '__main__':
        root = Tk()
        w = Canvas(root, width=600,height=600)
        w.pack()
        create_lines(w)
        create_text(w)       
        root.mainloop()
    Note: je ne sais pas comment vous calculer la position de l'item text mais c'est sûrement pas çà (et ré-organiser le code ne corrige pas ces bugs là).

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

  10. #10
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 305
    Par défaut
    Ha, c'est moi qui avais réutilisé deux fois le w, cela dit le message d'erreur identifie clairement le problème.


    Pareil pour les coordonnées des textes, mon exemple doit bien sur être adapté aux dimensions de ton canvas.


    Quelque chose dans ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    w, h = 30, 30
    for val in a:
        canvas.create_text(w, h, text=str(val))
        if w == 570:
            w, h = 30, h + 60
        else:
            w += 60
    ... tu adaptes, hein.

Discussions similaires

  1. Réponses: 15
    Dernier message: 09/06/2008, 16h51
  2. Réponses: 4
    Dernier message: 02/04/2008, 11h50
  3. Affichage des chiffres dans une phrases arabe
    Par omda dans le forum Oracle
    Réponses: 4
    Dernier message: 30/09/2005, 13h36
  4. Test si il y a des chiffres dans un champs
    Par deaqu1 dans le forum Access
    Réponses: 4
    Dernier message: 14/06/2005, 21h36
  5. inserer des " dans un response.write
    Par jefferson dans le forum ASP
    Réponses: 4
    Dernier message: 30/12/2004, 11h05

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