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 :

boucler sur widget OptionMenu


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 31
    Points : 14
    Points
    14
    Par défaut boucler sur widget OptionMenu
    Bonjour à tous,

    Je suis confronté à un problème Tkinter : je fais un boucle sur un widget à choix multiples (optionmenu) et je n'arrive pas à incrémenter la variable associée au widget (mat_p dans l'exemple ci-dessous).
    J'aimerai créer n variables (avec n le nombre de boucles) de la manière suivante : mat_p_n.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     mat_p_input = OptionMenu(p_assemblees, mat_p, "1S", "3S", "8S")
     mat_p_input.grid(row=counter + 2, column=3)
    Vous trouverez en PJ mon code.
    On voit bien que la variable mat_p est partagée par les différents widgets créés.
    Comment faire pour différencier les variables affectées ??

    Merci d'avance pour vos réponses


    NB : j'ai bien peur d'arriver à mes limites sur python/tkinter et devoir me farcir la programmation en class
    Fichiers attachés Fichiers attachés

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

    Citation Envoyé par Infra_Red Voir le message
    J'aimerai créer n variables (avec n le nombre de boucles) de la manière suivante : mat_p_n.
    C'est a çà que servent les listes non?

    NB : j'ai bien peur d'arriver à mes limites sur python/tkinter et devoir me farcir la programmation en class
    Si lorsque vous envisagez mat_p_0, mat_p_1, .... mat_p_n vous ne pensez pas à collection, séquence,... c'est que vous ne savez pas encore penser votre code en différentes structures de données.
    La POO vous permettra d'écrire votre code différemment mais ne vous aidera pas à "penser" votre code: vous aurez d'autres joujous pour ranger (et s'il n'y a rien à ranger...)

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

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Merci de ta réponse

    Citation Envoyé par wiztricks Voir le message
    C'est a çà que servent les listes non?
    j'ai bien créé une liste pour ranger mes différentes variables, je parle seulement de la définition du widget.
    Quand on joue avec le bout de code, on voit bien que la liste matériau se met à jour pour tout les widgets définis, alors que moi je voudrais différencier mes widgets OptionMenu

    Citation Envoyé par wiztricks Voir le message
    Si lorsque vous envisagez mat_p_0, mat_p_1, .... mat_p_n vous ne pensez pas à collection, séquence,... c'est que vous ne savez pas encore penser votre code en différentes structures de données.
    La POO vous permettra d'écrire votre code différemment mais ne vous aidera pas à "penser" votre code: vous aurez d'autres joujous pour ranger (et s'il n'y a rien à ranger...)
    oui il faut que je me penche dessus, mais je n'arrive pas encore "penser" POO et voir les avantages de ce paradigme.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 781
    Points
    36 781
    Par défaut
    Citation Envoyé par Infra_Red Voir le message
    Quand on joue avec le bout de code, on voit bien que la liste matériau se met à jour pour tout les widgets définis, alors que moi je voudrais différencier mes widgets OptionMenu
    mat_p est un StringVar i.e. une Variable TCL/Tk.
    Et vous pouvez associer la même Variable TCL/Tk à différents widgets justement pour qu'ils soient mis à jour automatiquement. Donc si vous n'associez pas à vos différents OptionMenu une StringVar spécifique, çà ne peut pas marcher.

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

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    le souci est que je n'ai jamais le même nombre de pièces, donc je ne connais pas le nombre de variables mat_p à définir!!!

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 781
    Points
    36 781
    Par défaut
    Citation Envoyé par Infra_Red Voir le message
    le souci est que je n'ai jamais le même nombre de pièces, donc je ne connais pas le nombre de variables mat_p à définir!!!
    C'est pour çà qu'il y a des listes... auxquelles on peut ajouter un ou plusieurs éléments à la fois sans se préoccuper, au départ, du nombre d'objets à y stocker.
    Il y a plein de tutos. qui expliquent comment fonctionnent les listes et ce qu'on peut faire avec.

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

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    je n'arrive justement pas à créer des listes DANS un widget.
    J'ai beau retourner le web sur comment incrémenter un nom de variable d'un OptionMenu, je ne trouve rien.

    si je poste ici, c'est justement que je suis dans une impasse et que j'aimerai des conseils de gens avisés

  8. #8
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut


    Je suis débutant en Python et j'ai parcouru votre code en diagonale, j'y ai vu un gros problème : mat_pieces = StringVar() et plus bas dans le code : mat_pieces = [] !

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

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

    Citation Envoyé par Infra_Red Voir le message
    je n'arrive justement pas à créer des listes DANS un widget.
    J'ai beau retourner le web sur comment incrémenter un nom de variable d'un OptionMenu, je ne trouve rien.
    Pourquoi voulez vous créer une liste DANS un widget? Ce que vous devez faire, dans un premier temps, c'est une liste de StringVar pour que chaque OptionMenu ait le sien.

    Citation Envoyé par Infra_Red Voir le message
    si je poste ici, c'est justement que je suis dans une impasse et que j'aimerai des conseils de gens avisés
    Si vous voulez programmer avec tkinter sans connaître les constructions et les types de base du langage, le seul conseil qu'on peut vous donner est d'ouvrir un tuto et d'y passer du temps (car ajouter un objet à une liste est "de base").

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

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Pourquoi voulez vous créer une liste DANS un widget? Ce que vous devez faire, dans un premier temps, c'est une liste de StringVar pour que chaque OptionMenu ait le sien.
    parce que l'optionmenu dépend d'une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    w = OptionMenu(master, variable, "one", "two", "three")
    et que je vois pas comment incrémenter celle-ci....
    j'ai un message d'erreur de type "list object is not callable" ou "StringVar object does not support indexing"

    Citation Envoyé par wiztricks Voir le message
    Si vous voulez programmer avec tkinter sans connaître les constructions et les types de base du langage, le seul conseil qu'on peut vous donner est d'ouvrir un tuto et d'y passer du temps (car ajouter un objet à une liste est "de base").
    merci de vos conseils mais justement je ne trouve rien sur ce point sur le web.
    Ça irait tellement plus vite pour tout le monde que vous me montriez un bon de code fonctionnel plutôt que tourner autour du pot....

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 781
    Points
    36 781
    Par défaut
    Citation Envoyé par Infra_Red Voir le message
    Ça irait tellement plus vite pour tout le monde que vous me montriez un bon de code
    fonctionnel plutôt que tourner autour du pot....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
             variable = StringVar()
             liste_de_variables.append(variable)
             w = OptionMenu(master, variable, "one", "two", "three")
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Vous avez ouvert mon bon de code ?

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 781
    Points
    36 781
    Par défaut
    Citation Envoyé par Infra_Red Voir le message
    Vous avez ouvert mon bon de code ?
    Absolument... Mais vos deux questions se résument en quelques lignes:
    Si j'utilise la même variable, tous les widgets qui lui sont associés sont mis à jour.
    Çà se reproduit en quelques lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    root = Tk()
    v = StringVar()
    OptionMenu(root, v, "one", "two", "three").pack()
    #v = StringVar()
    OptionMenu(root, v, "one", "two", "three").pack()
    mainloop()
    en faisant passer la ligne 6 de commentaire à code à exécuter.

    Sûr qu'ici, l'intérêt de la variable sera de récupérer les différents choix de l'utilisateur et comme on évite de créer une séquence indéfinie de variables
    v0, v1, ...vN, on peut utiliser une liste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    root = Tk()
    L = []
    for _ in range(3):
        v = StringVar()
        L.append(v)
        OptionMenu(root, v, "one", "two", "three").pack()
    mainloop()
    Pour ce qui est de corriger votre code de 150 lignes, si vous avez compris, vous pouvez le faire vous même et si vous ne comprenez toujours pas que faire: relisez les règles du forum avant de poster.

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

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par wiztricks Voir le message

    Pour ce qui est de corriger votre code de 150 lignes, si vous avez compris, vous pouvez le faire vous même et si vous ne comprenez toujours pas que faire: relisez les règles du forum avant de poster.

    - W
    Je n'ai jamais attendu que qqn corrige mon code, sinon j'aurais publié le code complet de 3000 lignes !!
    J'ai formulé clairement ma demande avec le bout de code défectueux à l'appui. Vous vous êtes entêter à me faire utiliser des listes : il suffisait d'ouvrir mon fichier pour voir que je l'utilise déjà !!

    On a discutaillé une journée pour rien puisqu'il suffisait de me dire de déclarer mat_p = StringVar() dans la boucle et non pas en début de code (que je ne savais pas et que je n'aurais jamais intuité).
    D'ailleurs, si vous connaissez la raison de boucler la déclaration de variable, je suis preneur (j'imagine que cela réinitialise la variable).

    Sur ce, merci bcp du temps consacré

  15. #15
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 781
    Points
    36 781
    Par défaut
    Citation Envoyé par Infra_Red Voir le message
    J'ai formulé clairement ma demande avec le bon de code défectueux à l'appui.
    Tout à fait! Dans le premier post vous avez écrit:
    Citation Envoyé par Infra_Red Voir le message
    J'aimerai créer n variables (avec n le nombre de boucles) de la manière suivante : mat_p_n.
    Et c'est de là que sort l'idée de passer par une liste.

    D'autant que vous dites par la suite:
    Citation Envoyé par Infra_Red Voir le message
    le souci est que je n'ai jamais le même nombre de pièces, donc je ne connais pas le nombre de variables mat_p à définir!!!


    Citation Envoyé par Infra_Red Voir le message
    On a discutaillé une journée pour rien puisqu'il suffisait de me dire de déclarer mat_p = StringVar() dans la boucle et non pas en début de code (que je ne savais pas et que je n'aurais jamais intuité).
    Ca c'est le soucis de mise à jour de vos widgets que vous avez explicité dans une des réponses mais ce n'est pas la question départ:
    Citation Envoyé par Infra_Red Voir le message
    Quand on joue avec le bout de code, on voit bien que la liste matériau se met à jour pour tout les widgets définis..

    Et je vous ai expliqué pourquoi dans cette réponse.

    Citation Envoyé par Infra_Red Voir le message
    On a discutaillé une journée pour rien puisqu'il suffisait de me dire de déclarer mat_p = StringVar() dans la boucle et non pas en début de code (que je ne savais pas et que je n'aurais jamais intuité).
    Ce n'est pas parce que çà fonctionne que c'est une chose à faire (et vous vous en apercevrez très bientôt).

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

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Avouez que vos réponses sont très vagues et confondantes pour qqn qui connait mal python et tkinter

    En espérant de prochains échanges aussi fructueux mais plus concis

  17. #17
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 781
    Points
    36 781
    Par défaut
    Citation Envoyé par Infra_Red Voir le message
    Avouez que vos réponses sont très vagues et confondantes pour qqn qui connait mal python et tkinter
    A partir du moment où vous programmez avec tkinter, vous devriez connaître un minimum de choses. En tout cas, vu que vous êtes supposé avoir passé du temps dans les tutos. avant de poster, on peut vous en faire crédit et penser que la fatigue vous a fait passer à côté de quelque chose de trivial.

    Sûr que si vous avez fait l'impasse sur la case "apprentissage"...
    Impossible d'avoir acquis le minimum de vocabulaire technique qui permet d'avoir une discussion (c'est une des raisons de ces règles).

    Citation Envoyé par Infra_Red Voir le message
    En espérant de prochains échanges aussi fructueux mais plus concis
    Tout à fait: ce sera une expédition direct à la case tuto. car si vous n'avez pas l'envie ou les moyens d'apprendre, pas la peine de demander de l'aide.

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

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

Discussions similaires

  1. Boucler sur une table pour renommer des valeurs
    Par webwhisky dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 03/01/2006, 14h19
  2. [Excel VBA] Boucler sur un userform
    Par tpv72 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/09/2005, 01h57
  3. Boucler sur des champs texte
    Par syl2095 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/11/2004, 16h15
  4. boucler sur des checkboxes
    Par El Saigneur dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 09/10/2004, 08h27
  5. [VB6] Comment boucler sur des controls d'un form ?
    Par lankviller dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2003, 16h29

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