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 :

Ajouter une variable / un évènement lors d'un clic


Sujet :

Tkinter Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2018
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Ajouter une variable / un évènement lors d'un clic
    Bonjour à tous,

    Je suis relativement nouveau dans le monde de la programmation sous Python, et encore plus avec l'utilisation de l'outil tkinter.

    Ma problématique est la suivante : je souhaite recueillir les tirs de chaque joueur d'une équipe de sport avec leur position sur le terrain. Pour chaque tir, je créer une nouvelle variable var, dans laquelle je spécifie le type de tir, le nom du joueur et sa position sur le terrain. Lorsque je clique sur un endroit du terrain, je souhaiterais que cette variable s'enregistre dans une liste coord. Après avoir identifier tous mes tir, il faut que je puisse enregistrer ma liste coord sous forme de tableau CSV.

    Voici à quoi cela ressemble jusqu'à maintenant.

    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    from tkinter import *
    from PIL import Image, ImageTk
    import numpy as np
     
    def cadre() :
        var[0] = 'Cadre'
    def bloque() :
        var[0] = 'Bloque'
    def out() :
        var[0] = 'Out'
    def goal() :
        var[0] = 'Goal'
     
    def J1() :
        var[1] = 'Joueur 1'
    def J2() :
        var[1] = 'Joueur 2'
    def J3() :
        var[1] = 'Joueur 3'
    def J4() :
        var[1] = 'Joueur 4'
     
    def localisation (event) :
        clic.config(text='X = ' + str(event.x) + '   Y = ' + str(event.y))
        var[2] = event.x ; var[3] = event.y
        print(var)
        coord.append(var)
        print(coord)
     
    def export() :
        coord = np.asarray(coord)
        np.savetxt('/Users/.../Desktop/Coord.csv', coord, delimiter=',')
     
    def reset() :
        coord = []
        var = ['', '', 0, 0]
     
    coord = []
    var = ['','',0,0]
     
    F = Tk()
    F.title('Localisation tirs')
     
    ## ENSEMBLE DES BOUTONS ##
    Boutons = Frame(F)
    Boutons.pack(side=LEFT, padx=20, pady=20)
     
    # Boutons TYPE
    Type = PanedWindow(Boutons, orient=HORIZONTAL)
    Button(Type, text='CADRE', borderwidth=1, width=15, command=cadre).grid(row=1, column=1)
    Button(Type, text='BLOQUE', borderwidth=1, width=15, command=bloque).grid(row=1, column=2)
    Button(Type, text='HORS CADRE', borderwidth=1, width=15, command=out).grid(row=1, column=3)
    Button(Type, text='GOAL', borderwidth=1, width=15, command=goal).grid(row=1, column=4)
    Type.columnconfigure(1, minsize = 150) ; Type.columnconfigure(2, minsize = 150) ; Type.columnconfigure(3, minsize = 150) ; Type.columnconfigure(4, minsize = 150)
    Type.rowconfigure(1, minsize = 30)
    Type.pack(side=TOP)
     
    # Boutons Joueurs
    Att = PanedWindow(Boutons, orient=HORIZONTAL)
    Button(Att, text='Joueur 1', borderwidth=1, width=15, command=J1).grid(row=1, column=1)
    Button(Att, text='Joueur 2', borderwidth=1, width=15, command=J2).grid(row=1, column=2)
    Button(Att, text='Joueur 3', borderwidth=1, width=15, command=J3).grid(row=1, column=3)
    Button(Att, text='Joueur 4', borderwidth=1, width=15, command=J4).grid(row=1, column=4)
    Att.columnconfigure(1, minsize=150) ; Att.columnconfigure(2, minsize=150) ; Att.columnconfigure(3, minsize=150) ; Att.columnconfigure(4, minsize=150)
    Att.rowconfigure(1, minsize=30)
    Att.pack(side=TOP, pady=30)
     
    # Boutons Save and reset
    Options = PanedWindow(Boutons, orient=HORIZONTAL)
    Button(Options, text='Export.csv', borderwidth=1, width=15, command=export).grid(row=1, column=1)
    Button(Options, text='Reset', borderwidth=1, width=15, command=reset).grid(row=1, column=2)
    Options.columnconfigure(1, minsize=150) ; Options.columnconfigure(2, minsize=150)
    Options.pack(side=TOP, pady=60)
     
     
    ## TERRAIN ##
    img = Image.open('/Users/.../Desktop/Field.png')
    larg, haut = img.size
     
    img = PhotoImage(file='/Users/.../Desktop/Field.png')
    Field = Canvas(F, width=larg+50, height=haut+20)
    Field.create_image(10, 10, anchor=NW, image=img)
    Field.pack(side = RIGHT)
     
    # Clic terrain
    Field.bind('<Button-1>', localisation)
    clic = Label(F, text='Coordonnees')
    clic.pack()
     
    F.mainloop()
    Je suis confronté à 3 difficultés :
    • Problème 1 : J'arrive a obtenir une variable var pour chaque tir, mais je n'arrive pas à les accumuler dans coord (elles s'écrasent plus ou moins)
    • Problème 2 : Au moment d'enregistrer coord, mon terminal me retourne l'erreur suivante
      coord = np.asarray(coord)
      UnboundLocalError: local variable 'coord' referenced before assignment
    • Problème 3 : J'ai un total de 26 joueurs, est-ce qu'il existerait un moyen plus rapide de retourner la valeur du bouton que je viens de cliquer, plutôt que de créer une nouvelle fonction J5, J6, J7, ..., J26 pour chaque boutons ?


    Après quelques recherches j'ai compris que les problèmes 1 et 2 sont similaires : Python considère toutes variables au sein d'une fonction comme nouvelle (si j'ai bien compris, et c'est pour ça qu'il ne connaît pas de coord, quand je veux enregistrer en CSV). Mais je n'ai pas trouver de solution sur le net...
    Pour mon problème 3 je n'ai rien vu à ce sujet, en espérant que vous puissiez m'aider.

    Merci de votre aide !

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

    Citation Envoyé par Levels Voir le message
    Python considère toutes variables au sein d'une fonction comme nouvelle (si j'ai bien compris, et c'est pour ça qu'il ne connaît pas de coord, quand je veux enregistrer en CSV). Mais je n'ai pas trouver de solution sur le net...
    Il n'y a pas de solution sur le net à un problème que vous n'avez pas essayé de comprendre: vous n'avez même pas les mots clefs pour la trouver!
    Vous devez commencer par apprendre les fonctionnalités de base du langage en ouvrant un tuto. et en pratiquant. Cela vous permet de vous familiariser à la programmation avec Python et à penser vos codes avec les règles que çà impose (plutôt que d'essayer un truc en pensant que çà devrait fonctionner et constater que çà ne marche pas). De plus quand vous avez un soucis sur la portée des variables et les fonctions, vous pouvez retrouver et relire le chapitre correspondant.

    Citation Envoyé par Levels Voir le message
    Problème 3 : J'ai un total de 26 joueurs, est-ce qu'il existerait un moyen plus rapide de retourner la valeur du bouton que je viens de cliquer, plutôt que de créer une nouvelle fonction J5, J6, J7, ..., J26 pour chaque boutons ?
    La solution s'appelle closure/fermeture.... Que vous auriez aussi trouvée en ouvrant n'importe quel bon tuto. qui présente la programmation avec tkinter.

    - W

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/02/2009, 21h50
  2. Activation d'une zone de page lors d'un clic
    Par Amokrane dans le forum Langage
    Réponses: 10
    Dernier message: 15/07/2008, 18h51
  3. ajouter un item d'une liste à une autre liste
    Par zalalus dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 14/07/2008, 19h04
  4. ajouter le résultat d une requête à la variable d une table
    Par Claire07 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 19/06/2006, 15h03
  5. Attribuer une classe à un élément lors d'un clic
    Par Perceval dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 18/10/2005, 18h19

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