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 :

coordonnées et déplacement de points


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2011
    Messages : 58
    Par défaut coordonnées et déplacement de points
    Bonsoir,

    J'essaie, sans succès, de "récupérer" les coordonnées de points créés avec ".create_line()" puis de déplacer un de ces points (ici le "pixel[4]") de 10 suivant x et de 20 suivant y.

    De même, en faisant apparaître la hauteur et la largeur du Canevas, les résultats ne sont pas cohérents car la fenêtre étant presque complétement ouverte, les valeurs devraient être plus grandes.

    Voici le script :
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    from tkinter import *
     
    class Environnement (object) :
     
        def __init__(self, fenetre, canevas) :
            self.canevas = canevas
            self.confg = self.canevas.configure()
     
        def Canevas_largeur (self) :
            return(self.confg['width'][4])
     
        def Canevas_hauteur (self) :
            return(self.confg['height'][4])
     
        def Coordonnees (self) :
            for white in self.canevas.find_withtag('pixel'):
                print(self.canevas.coords(white))
     
     
    class Dessin (object) :
     
        def __init__(self, x, y, couleur, canevas) :
            self.canevas = canevas
            self.x = x
            self.y = y
            self.couleur = couleur
     
        def Dessiner_Point(self):
            self.canevas.create_line(self.x, self.y, self.x+1, self.y+1, width=1, fill=self.couleur, tags='pixel')
     
     
    class Programme_Principal(object) :
     
        def __init__(self) :
            self.fen = Tk()
            self.fen.geometry("2000x2000")
            self.Can = Canvas(self.fen, bg='blue')
            self.Can.pack(fill=BOTH, expand=Y)
     
            # récupération des informations sur le canevas
            self.envir = Environnement(self.fen, self.Can)
            print('Paramètres du Canevas : ')
            print('Largeur du canevas = ', self.envir.Canevas_largeur())
            print('Hauteur du canevas = ', self.envir.Canevas_hauteur())
            print('')
     
            # création d'un tableau pour enregistrer chaque "pixel" créé
            self.pixel = []
     
            print('Adresse de chaque pixel :')
            for index in range(5) :
                x, y, couleur, canevas = 50+index, 50+index, 'white', self.Can
                self.pixel.append(Dessin(x, y, couleur, canevas))
                self.pixel[index].Dessiner_Point()
                print(self.pixel[index])
            print('')
     
     
            # récupération des coordonnées de chaque pixel
            print('Coordonnées de chaque pixel : ')
            for index in range(5) :
                print('Coordonnées du pixel_', index+1, ' = ', self.Can.coords(self.pixel[index]))
            print ('')
     
            # déplacement du pixel[4] de 10 suivant x et 20 suivant y
            self.Can.move(self.pixel[4], 10, 20)
     
            # récupération des coordonnées de chaque pixel par la méthode du "tag"
            print('coordonnées de chaque pixel par la méthode du "tag" :')
            self.envir.Coordonnees()
     
            self.fen.mainloop()
     
    if __name__ == '__main__' :
     
        Programme_Principal()
    Pourriez-vous m'aider pour ces problèmes ?

    Par avance merci.

    Voici ce que j'obtiens comme résultats :

    Paramètres du Canevas :
    Largeur du canevas = 472
    Hauteur du canevas = 330

    Adresse de chaque pixel :
    <__main__.Dessin object at 0x02F7BEB0>
    <__main__.Dessin object at 0x02F7BA10>
    <__main__.Dessin object at 0x02F840F0>
    <__main__.Dessin object at 0x02F84130>
    <__main__.Dessin object at 0x02F84190>

    Coordonnées de chaque pixel :
    Coordonnées du pixel_ 1 = []
    Coordonnées du pixel_ 2 = []
    Coordonnées du pixel_ 3 = []
    Coordonnées du pixel_ 4 = []
    Coordonnées du pixel_ 5 = []

    coordonnées de chaque pixel par la méthode du "tag" :
    [50.0, 50.0, 51.0, 51.0]
    [51.0, 51.0, 52.0, 52.0]
    [52.0, 52.0, 53.0, 53.0]
    [53.0, 53.0, 54.0, 54.0]
    [54.0, 54.0, 55.0, 55.0]

  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,

    Je n'ai pas trop bien compris ce que vous trouvez d'incohérent mais je remarque que dans self.pixel vous stockez des instances de la classe Dessin et non pas des items du Canvas.
    Une approche 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
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
        def Dessiner_Point(self):
            self.pts = self.canevas.create_line(self.x, self.y, self.x+1, self.y+1, width=1, fill=self.couleur, tags='pixel')
     
        def get_pts_coords(self):
            return self.canevas.coords(self.pts)
     
     
    class Programme_Principal(object) :
     
        def __init__(self) :
            self.fen = Tk()
            self.fen.geometry("2000x2000")
            self.Can = Canvas(self.fen, bg='blue')
            self.Can.pack(fill=BOTH, expand=Y)
     
            # récupération des informations sur le canevas
            self.envir = Environnement(self.fen, self.Can)
            print('Paramètres du Canevas : ')
            print('Largeur du canevas = ', self.envir.Canevas_largeur())
            print('Hauteur du canevas = ', self.envir.Canevas_hauteur())
            print('')
     
            # création d'un tableau pour enregistrer chaque "pixel" créé
            self.pixel = []
     
            print('Adresse de chaque pixel :')
            for index in range(5) :
                x, y, couleur, canevas = 50+index, 50+index, 'white', self.Can
                self.pixel.append(Dessin(x, y, couleur, canevas))
                self.pixel[index].Dessiner_Point()
                print(self.pixel[index])
            print('')
     
     
            # récupération des coordonnées de chaque pixel
            print('Coordonnées de chaque pixel : ')
            for index in range(5) :
                print('Coordonnées du pixel_', index+1, ' = ', self.pixel[index].get_pts_coords())
            print ('')
     
            # déplacement du pixel[4] de 10 suivant x et 20 suivant y
            self.Can.move(self.pixel[4].pts, 10, 20)
            print("Le pixel 4 est en %s" % str(self.pixel[4].get_pts_coords()))
    Ou encore
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    class Dessin (object) :
     
        def __init__(self, x, y, couleur, canevas) :
            self.canevas = canevas
            self.x = x
            self.y = y
            self.couleur = couleur
     
        def Dessiner_Point(self):
            self.pts = self.canevas.create_line(self.x, self.y, self.x+1, self.y+1, width=1, fill=self.couleur, tags='pixel')
     
     
    class Programme_Principal(object) :
     
        def __init__(self) :
            self.fen = Tk()
            self.fen.geometry("2000x2000")
            self.Can = Canvas(self.fen, bg='blue')
            self.Can.pack(fill=BOTH, expand=Y)
     
            # récupération des informations sur le canevas
            self.envir = Environnement(self.fen, self.Can)
            print('Paramètres du Canevas : ')
            print('Largeur du canevas = ', self.envir.Canevas_largeur())
            print('Hauteur du canevas = ', self.envir.Canevas_hauteur())
            print('')
     
            # création d'un tableau pour enregistrer chaque "pixel" créé
            self.pixel = []
     
            print('Adresse de chaque pixel :')
            for index in range(5) :
                x, y, couleur, canevas = 50+index, 50+index, 'white', self.Can
                self.pixel.append(Dessin(x, y, couleur, canevas))
                self.pixel[index].Dessiner_Point()
                print(self.pixel[index])
            print('')
     
     
            # récupération des coordonnées de chaque pixel
            print('Coordonnées de chaque pixel : ')
            for index in range(5) :
                print('Coordonnées du pixel_', index+1, ' = ', self.Can.coords(self.pixel[index].pts))
            print ('')
     
            # déplacement du pixel[4] de 10 suivant x et 20 suivant y
            self.Can.move(self.pixel[4].pts, 10, 20)
            print("Le pixel 4 est en %s" % str(self.Can.coords(self.pixel[4].pts)))
    Pour récupérer l'id de l'item ?

    Maintenant avez vous vraiment besoin de la classe Dessin ?

    @+

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2011
    Messages : 58
    Par défaut
    Bonjour PauseKawa,

    Comme à votre habitude vous avez répondu parfaitement aux problèmes que je rencontrais.

    En ce qui concerne l'"incohérence" des dimensions du Canevas, je ne comprends pas pourquoi lorsque j'ouvre la fenêtre en "2000x2000", le Canevas ne se "dimensionne" pas aussi en 2000x2000 -puisqu'il se "propage" dans toute la fenêtre- et donc il devrait retourner des dimensions de cet ordre et non "472x330", non ?

    Pour ce qui est de la class "Dessin", elle n'est pas indispensable effectivement mais c'est juste pour m'entraîner à manipuler le plus possible les class et surtout afin de pouvoir utiliser, dans une class, des instances créées dans une autre class.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/11/2016, 12h14
  2. Comment récupér les coordonnées GPS d'un point sur la carte
    Par Rhino Onizuka dans le forum APIs Google
    Réponses: 2
    Dernier message: 10/01/2014, 13h42
  3. Retrouver les coordonnées 3D de 4 points avec contraintes
    Par jobigoud dans le forum Mathématiques
    Réponses: 13
    Dernier message: 22/10/2008, 11h55
  4. Coordonnées rotation d'un point
    Par spender dans le forum 2D
    Réponses: 15
    Dernier message: 21/08/2007, 17h40

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