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 :

Problème pour inclure une variable à un objet


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Problème pour inclure une variable à un objet
    Bonsoir,

    Je vais essayer d'expliquer le mieux possible ce que je voudrais faire. En fait, je voudrais par exemple modifier 5 couleurs de fond de Canvas en mm temps.
    Je voudrai donc pouvoir remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    canvas1.configure(bg = "red")
    canvas2.configure(bg = "red")
    canvas3.configure(bg = "red")
    canvas4.configure(bg = "red")
    canvas5.configure(bg = "red")
    par un truc de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for i in range(5) :
           canvas[i].configure(bg = "red")
    afin de pouvoir modifier alors les 5 canvas avec moins de lignes de code.

    Est ce possible et de quelle facon? merci d'avance

  2. #2
    Membre averti Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Points : 390
    Points
    390
    Par défaut
    Bonjour,

    (attention, dans votre exemple, c'est for i in range(1, 6))

    Je ne suis pas un expert, mais ça commence à faire quelques semaines que je suis dans Tkinter, alors, puisque vous semblez n'avoir pas de réponse, je me lance.
    Première solution, qui modifie peu votre code: au moment où vous créez vos
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Canvas:
    canvaslist = []
    canvas1 = Canvas(....)
    canvaslist.append(canvas1)
    #etc.
    Ensuite (par exemple):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for canvas in canvaslist :
           canvas.configure(bg = "red")
    Mais je préfèrerais créer une collection de Canvas, soit une liste s'ils sont équivalents, soit un dictionnaire s'ils sont spécialisés et donc ont naturellement un nom. Imaginons trois Canvas 'pierre', 'paul', 'jean'.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    canvas = {}
    for key in ['pierre', 'paul', 'jean']:
        canvaslist[key] = Canvas(....)
    Vous pouvez améliorer en ayant un dictionnaire dont les clés seraient les noms, et les values des tuples de paramètres, ou alors une liste de tuples dont le premier élément serait le nom. Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CANVAS_PARAMS = { 'pierre':[1, 'TOP', 0] 
                    , 'paul'  :[1, 'BOTTOM', 0] 
                    , 'jean'  :[1, 'TOP', 0]
                    }
    ou:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CANVAS_PARAMS = [ ['pierre', 1, 'TOP', 0] 
                    , ['paul', 1, 'BOTTOM', 0] 
                    , ['jean', 1, 'TOP', 0] 
                    ]
    Si le code est correct, vous pouvez ensuite ne modifier que ces séquences pour faire évoluer votre interface. Vous pouvez créer ses sous-listes de clés, pour faire des traitements sur une partie des Canvas. Vous pouvez faire encore bien des choses en utilisant les mêmes clés pour des Buttons, items de Menu, actions, etc.

    Je ne suis pas assez calé pour affirmer que les autres voies ne peuvent fonctionner, mais je suis pessimiste:
    - Bricoler avec des eval, exec et autres compile.
    - Affecter la même variable Tkinter à tous les 'bg', pas possible il me semble.
    - Un 'bg' transparent (possible ?) ou un héritage du 'bg' du parent (possible ?) en changeant la couleur du parent.

    Voilà, bonne journée

    Pierre

  3. #3
    Membre averti
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Points : 388
    Points
    388
    Par défaut
    Bonjour,
    Tu peux aussi faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in range(1,6) :
           exec("canvas%s.configure(bg = "red")" %(i))

Discussions similaires

  1. Problème pour modifier une variable globale
    Par supertom dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 07/06/2007, 18h00
  2. Réponses: 3
    Dernier message: 06/06/2007, 15h21
  3. Réponses: 17
    Dernier message: 01/06/2007, 08h16
  4. Réponses: 2
    Dernier message: 14/04/2006, 18h40
  5. Probléme pour insérer une variable dans un champs
    Par BOUTRAIS dans le forum Access
    Réponses: 2
    Dernier message: 11/04/2006, 22h45

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