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 :

Alignement automatique sur une grille ?


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 67
    Par défaut Alignement automatique sur une grille ?
    Bonjour à tous,

    J’essaie de développer un programme qui dessinerait les boucles d'un chauffage sol automatiquement avec Turtle suivant les coordonnées renvoyée par le programme.

    Voici le début du 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
     
    from tkinter import *
     
    # Fenêtre
    root = Tk()
    Largeur = 800
    Hauteur = 600
    canvas = Canvas(root, width=Largeur, height=Hauteur, background="white")
    canvas.pack(side=LEFT, padx=5, pady=5)
     
    #Capture des clics de la souris
    def action_clic_souris(event):
        canvas.focus_set()
        x = event.x
        y = event.y
        canvas.create_rectangle(x, y, x+10, y+10, fill="red")
        print("Clic à x =", x, "Clic à y =", y)
        return
     
    # Association clic/action
    canvas.bind("<Button-1>", action_clic_souris)
     
    #Lancement
    root.mainloop()
    Si vous le testez, il affiche un carré rouge de 10 x 10 sur l'écran et renvoi dans la console les coordonnées.
    J'aimerai afficher une grille derrière de 10x10 où mon carré s'alignement avec celle ci.

    Avez vous une idée ?

    Je vous remercie.

    Max

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

    Citation Envoyé par maxstilde Voir le message
    J'aimerai afficher une grille derrière de 10x10 où mon carré s'alignement avec celle ci.
    La grille peut se faire avec .create_line.
    Après, c'est une boucle (ou deux) a écrire pour tracer une ligne verticale tous les pas de ... et une ligne horizontale tous les pas de...

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

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 67
    Par défaut
    Bonjour,

    La grille y a pas de soucis , je l ai faite. Le soucis est que le carré ne s aligne pas dans les carrés de la grille...

    C est à cette étape que je bloque complètement

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par maxstilde Voir le message
    La grille y a pas de soucis , je l ai faite. Le soucis est que le carré ne s aligne pas dans les carrés de la grille...
    Ca serait mieux de le montrer.

    Sûr que si vous affichez le carré à la position (x, y) où on a cliqué, peu probable que ce soit aligné sur quoi que ce soit.

    Avec une grille de 10x10 carrés de 50 de côté, trouver (xi, yj) tels que xi<= x <xi+1 et yj <= y < yj+1, n'est pas si compliqué (et çà n'a rien à voir avec de la programmation Python).

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

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 67
    Par défaut
    Comment ça ?

    Je ne comprends pas , savez m informer sur le sujet ?
    Pour que python me place mon carré dans un carré après avoir cliqué , je pensai que c était de la programmation

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

    Citation Envoyé par maxstilde Voir le message
    Pour que python me place mon carré dans un carré après avoir cliqué , je pensai que c était de la programmation
    La programmation c'est partir d'un besoin: afficher une grille de 10x10 carrés de 50 de côté où quand l'utilisateur un carré 10x10 s'affiche "aligné" sur la grille.

    Et le reformuler pour arriver à le "programmer" avec (pourquoi pas) le Canvas tkinter).
    "reformuler", c'est déjà se poser des questions, ok, l'utilisateur veut voir une grille.

    Est que que je la construis avec des lignes du Canvas et je fabrique un carré que j'aligne ou est que c'est 10x10 carrés qui changent de couleur lorsqu'on clique dessus.
    La moins mauvaise solution dépendra de ce qu'on veut en faire (le programme ne se réduit pas à çà).

    Puis si on ne sait pas faire, on réalise une petite maquette pour voir ce que çà donne.
    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
    from tkinter import Canvas, mainloop
     
    canvas = Canvas(width=550, height=550)
    canvas.pack()
    for x in range(25, 525, 50):
        for y in range(25, 525, 50):
            canvas.create_rectangle(x, y, x+50, y+50,
                                    width=2, outline='grey',
                                    fill='white',
                                    tag='square')
    def on_click(e):
        iid = canvas.find_withtag('current')[-1]
        canvas.itemconfigure(iid, fill='grey')
     
    canvas.tag_bind('square', '<1>', on_click)
    mainloop()
    Avec une grille de carrés, pas besoin d'aligner...

    Citation Envoyé par maxstilde Voir le message
    Comment arrive tu a ce résultat ?
    Je ne comprends pas le code que tu me propose.
    Vous voyez que ce n'est pas qu'un problème de programmation puisque si vous ne comprenez pas une des solutions, pas facile de la réutiliser.

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

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    Citation Envoyé par maxstilde Voir le message
    Si vous le testez, il affiche un carré rouge de 10 x 10 sur l'écran et renvoi dans la console les coordonnées.
    J'aimerai afficher une grille derrière de 10x10 où mon carré s'alignement avec celle ci.

    Avez vous une idée ?
    J'ai une idée mais je ne suis pas sûr d'avoir bien compris ce que tu veux...

    Voici mon idée :

    Code python : 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
     
    from tkinter import *
     
    # Fenêtre
    root = Tk()
    Largeur = 800
    Hauteur = 600
    canvas = Canvas(root, width=Largeur, height=Hauteur, background="white")
    canvas.pack(side=LEFT, padx=5, pady=5)
     
    # Capture des clics de la souris
     
     
    def action_clic_souris(event):
        canvas.focus_set()
        x = event.x
        y = event.y
        # canvas.create_rectangle(x, y, x+10, y+10, fill="red")
        print("Clic à x =", x, "Clic à y =", y)
        i = x//80 * 80 + 40
        j = y//60 * 60 + 30
        print("Clic à i =", i, "Clic à j =", j)
        canvas.create_rectangle(i, j, i+10, j+10, fill="green")
        return
     
     
    # Association clic/action
    canvas.bind("<Button-1>", action_clic_souris)
     
    # Lancement
    root.mainloop()
    Avec ces dimensions les cases de la grille* sont plus grandes que les carrés (j'ai choisi de placer les carrés verts au centre des cases mais si tu veux autre chose à toi de changer...).

    *Je n'ai pas affiché la grille puisque ça tu as dit que tu sais le faire...

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 67
    Par défaut
    Bonjour Beginner,

    C'est tout à fait ça mais avec de plus petit carré.

    Comment arrive tu a ce résultat ?

    Je ne comprends pas le code que tu me propose.

    Je te remercie pour ton aide

  9. #9
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    Citation Envoyé par maxstilde Voir le message
    C'est tout à fait ça mais avec de plus petit carré.
    Je n'ai pas compris, les carrés qui s'affichent sont trop petits ?
    Les carrés verts font 10 x 10 ce n'est pas ce que tu veux ?

    Ou bien tu veux que les cases/cellules de la grille soient aussi grandes que les carrés ?

  10. #10
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Ou bien tu veux que les cases/cellules de la grille soient aussi grandes que les carrés ?
    Au cas où ce serait ça que tu veux voilà :

    Code python : 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
     
    from tkinter import *
     
    # Fenêtre
    root = Tk()
    Largeur = 800
    Hauteur = 600
    canvas = Canvas(root, width=Largeur, height=Hauteur, background="white")
    canvas.pack(side=LEFT, padx=5, pady=5)
     
    # Capture des clics de la souris
     
     
    def action_clic_souris(event):
        canvas.focus_set()
        x = event.x
        y = event.y
        # canvas.create_rectangle(x, y, x+10, y+10, fill="red")
        print("Clic à x =", x, "Clic à y =", y)
        i = x//80 * 80 
        j = y//60 * 60 
        print("Clic à i =", i, "Clic à j =", j)
        canvas.create_rectangle(i, j, i+80, j+60, fill="green")
        return
     
     
    # Association clic/action
    canvas.bind("<Button-1>", action_clic_souris)
     
    # Lancement
    root.mainloop()

Discussions similaires

  1. Réponses: 13
    Dernier message: 28/01/2008, 09h27
  2. [VBA-E] calculs automatique sur une seule feuille
    Par repié dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/03/2006, 11h53
  3. remplissage cellule automatique sur une donnée saisie !
    Par ptitlulu94 dans le forum Access
    Réponses: 1
    Dernier message: 15/03/2006, 15h06
  4. Réponses: 16
    Dernier message: 10/11/2005, 22h51
  5. Afficher des images sur une grille
    Par Coussati dans le forum Composants VCL
    Réponses: 3
    Dernier message: 27/10/2005, 09h27

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