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 :

Python tkinter addition 2 Spinbox


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2014
    Messages : 30
    Par défaut Python tkinter addition 2 Spinbox
    Bonjour,

    Je débute en programmation Python est je n'arrive pas à trouver de tutoriel ou exemple sur les calculs à travers l'interface tkinter.

    Je souhaite addition les 2 Spinbox : menuconfig1 et menuconfig2 mais je ne trouve pas comment faire.

    Je souhaiterai également si cela est possible :
    - lorsque la spinbox menuconfig1 est à 2
    - ceci renvoie la valeur 2 x 4.35 pour le calcul de ttcgrenoble()

    Par avance un immense merci


    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
     
    from tkinter import * 
     
    fenetre = Tk()
    fenetre.geometry("1024x768+300+0")
     
    menu1 = 0
     
    txt1 = Label(fenetre, text="Bienvenu chez Macdo")
    txt1.pack()
    txt2 = Label(fenetre, text="Veuillez choisir votre Menu est comparer les prix :")
    txt2.place(x=45, y=40)
     
    var1 = 13
     
    def ttcgrenoble():
        Resultat.set("Montant total ttc pour Grenoble = "++str(float(menucfg1.get())+menucfg2.get))
     
     
    def calculgrenoble():
        Resultat.set(menucfg1.get())
    menucfg1 = StringVar()
    menucfg1.set(0)
    menu1 = Label(fenetre,text="Big Mac").place(x=75, y=70)
    menuconfig1 = Spinbox(fenetre,from_=0,to=10,increment=1,textvariable=menucfg1,width=2,command=calculgrenoble).place(x=45, y=70)
     
     
    def calculgrenoble2():
        Resultat.set(menucfg2.get())
    menucfg2 = StringVar()
    menucfg2.set(0)
    menu2 = Label(fenetre, text="Royal Bacon").place(x=75, y=100)
    menuconfig2 = Spinbox(fenetre,from_=0,to=10,increment=1,textvariable=menucfg2,width=2,command=calculgrenoble).place(x=45, y=100)
     
     
    coche3 = Checkbutton(fenetre, text="Royal Cheese")
    coche3.place(x=45, y=130)
    coche4 = Checkbutton(fenetre, text="McWrap Chèvre")
    coche4.place(x=45, y=160)
    coche5 = Checkbutton(fenetre, text="McChiken")
    coche5.place(x=45, y=190)
     
    coche6 = Checkbutton(fenetre, text="Royal Deluxe ")
    coche6.place(x=180, y=70)
    coche7 = Checkbutton(fenetre, text="Chicken McNuggets fois 6")
    coche7.place(x=180, y=100)
    coche8 = Checkbutton(fenetre, text="Filet-O-Fish")
    coche8.place(x=180, y=130)
    coche9 = Checkbutton(fenetre, text="Double Cheese")
    coche9.place(x=180, y=160)
    coche10 = Checkbutton(fenetre, text="Cheeseburger")
    coche10.place(x=180, y=190)
     
     
     
    Resultat = StringVar()
    ttcgrenoble()
    Label(fenetre,textvariable=Resultat).pack(padx=30,pady=10)
     
     
     
     
     
    fenetre.mainloop()

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 707
    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 707
    Par défaut
    Salut,
    Normalement, le cut&paste du code préserve l'indentation et permet de le rendre lisible avec le seul ajout d'une balise CODE. Dans votre cas, ben non! Éditez votre message et corrigez cela vous même...

    edit: bravo, vous avez ajouté la balise CODE mais si je ne l'ai pas fait, c'était bien pour éviter d'avoir un tas de boue comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def calculgrenoble():
    Resultat.set(menucfg1.get())
    menucfg1 = StringVar()
    menucfg1.set(0)
    menu1 = Label(fenetre,text="Big Mac").place(x=75, y=70)
    menuconfig1 = Spinbox(fenetre,from_=0,to=10,increment=1,textvariable=menucfg1,width=2,command=calculgrenoble).place(x=45, y=70)
    Encore un effort.

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

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

    Pour avancer un peu, le callback déclaré par Spinbox(..., command=callback) est appelé à chaque mise à jour de la spinbox.
    Créer 2 Spinbox variant de 0 à 10 dont la somme se met à jour dans un Label, c'est - par exemple -:
    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
    import tkinter as tk
     
    def update_label():
        value = 0
        for box in boxes:
            value += int(box.get())
        label['text'] = value
     
    boxes = []
    for _ in range(2):    
        box = tk.Spinbox(from_=0, to=10, command=update_label)
        box.pack()
        boxes.append(box)
     
    label = tk.Label()
    update_label()
    label.pack()
     
    tk.mainloop()
    La mécanique est simple.

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

  4. #4
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2014
    Messages : 30
    Par défaut autre question
    Merci pour votre réponse.

    Pourriez vous me dire si il est possible dans votre exemple d'avoir un résultat différent en bas de page pour un spinbox.
    Exemple : La spinbox étant à 2 et l'autre à 0 le résultat devrai être de 2. Mais peut on indiquer que 2 fait référence à un chiffre exemple 4.35 et donc que le résultat devra être 2 * 4.35 soit 8.7 en bas de page ?

    Par avance merci

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 707
    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 707
    Par défaut
    Citation Envoyé par asmodaisda Voir le message
    Mais peut on indiquer que 2 fait référence à un chiffre exemple 4.35 et donc que le résultat devra être 2 * 4.35 soit 8.7 en bas de page ?
    En matière de programmation, tout se résout en ajoutant le nombre d'indirections qu'il faut...

    Vous pouvez créer un "dict" contenant des correspondances comme 2 -> 4.35.
    La spinbox affiche les "clés" du dict et dans "update_label", vous calculez à partir de la valeur associée à la clé sélectionnée.

    Mais comme apprendre à programmer, c'est patauger avec l'ordi. à vous d'essayer de coder çà.

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

  6. #6
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2014
    Messages : 30
    Par défaut test
    J'ai essayé divers test mais je ne comprend pas le fonctionnement.

    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
     
    import tkinter as tk
     
    def update_label():
        mon_dictionnaire = {1==1*4,2==5,3==6}
        value = 0
        for box in boxes:
            value += int(box.get())
        label['text'] = value
     
    boxes = []
    for _ in range(1):
        box = tk.Spinbox(from_=0, to=3, command=update_label)
        box.pack()
        boxes.append(box)
     
    label = tk.Label()
    update_label()
    label.pack()
     
    tk.mainloop()

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

    Virez tout et travaillez seulement sur la redirection.
    Ce sont des tests de fonctionnalités qui se font "bien" directement à la console Python:

    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
    >>> import tkinter as tk
    >>> ITEMS = { '1': 1.0, '2': 2.0, '3': 3.0 }  # le dictionnaire, à priori "global" puisqu'on récupère ses clés plus loin.
    >>> def update_label():
    ...     key = items_sb.get()
    ...     label['text'] = ITEMS[key]
    ...
    >>> items_sb = tk.Spinbox(values=list(ITEMS.keys()),    
    ...       command=update_label,
    ...       state='readonly',    # on permet à l'utilisateur de "changer" l'item mais pas de mettre à jour le contenu.
    ...       )
    >>> items_sb.pack()
    >>> label = tk.Label()
    >>> update_label()
    >>> label.pack()
    >>> tk.mainloop()
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2014
    Messages : 30
    Par défaut
    Merci pour la réponse malheureusement je n'ai pas le niveau pour comprendre.

    Avec vos autres réponses j'ai réussi à avoir un résultat malheureusement il y a un bug car la valeur des spinbox ne conserve pas leurs valeur par défaut.
    Lorsque je mes les 2 spinbox à 1 puis que je descend l'une des valeur à 0.
    La spinbox 1 sera égale à 5.05 alors qu'elle devrai être de 4.35.

    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
     
    import tkinter as tk
    var = 4.35
    var2 = 5.05
    def update_label():
     
        value = 0
        for box in boxes:
            value +=  int(box.get())*var
        label['text'] = value
    def update_label2():
     
        value = 0
        for box in boxes:
            value +=  int(box.get())*var2
        label['text'] = value
     
    boxes = []
    for _ in range(1):
        box = tk.Spinbox(from_=0, to=3, command=update_label)
        box.pack()
        boxes.append(box)
     
    for _ in range(1):
        box = tk.Spinbox(from_=0, to=2, command=update_label2)
        box.pack()
        boxes.append(box)
     
    label = tk.Label()
    update_label()
    label.pack()
     
    tk.mainloop()

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 707
    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 707
    Par défaut
    Citation Envoyé par asmodaisda Voir le message
    Lorsque je mes les 2 spinbox à 1 puis que je descend l'une des valeur à 0.
    La spinbox 1 sera égale à 5.05 alors qu'elle devrai être de 4.35.
    Ca se contente d'exécuter les instructions que vous avez écrites.
    Honnêtement, je ne vois pas trop ce que vous voulez faire.

    Si vous voulez éviter listes et dict, peut être que cela est plus compréhensible:

    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
    import tkinter as tk
     
    def update_label():
     
        value = v1 * int(b1.get()) + v2 * int(b2.get())
        label['text'] = value
     
    v1 = 3 
    b1 = tk.Spinbox(from_=0, to=3, command=update_label)
    b1.pack()
     
    v2 = 5
    b2 = tk.Spinbox(from_=0, to=2, command=update_label)
    b2.pack()
     
    label = tk.Label()
    update_label()
    label.pack()
     
    tk.mainloop()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2014
    Messages : 30
    Par défaut Presque fini ;)
    Merci beaucoup j'ai pu réussir à avancer grandement

    Par contre je ne comprend pas pourquoi cette ligne ( label.pack(padx=30,pady=10) ) ne se place pas juste à coté de ( Veuillez choisir votre Menu Bestof est comparer les prix : ) mais en haut en plein milieu.



    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
    92
    93
    94
    95
    96
     
    from tkinter import *
    import tkinter as tk
     
    fenetre = Tk()
    fenetre.geometry("1024x768+300+0")
     
    menu1 = 0
     
    txt1 = Label(fenetre, text="Bienvenu chez Macdo")
    txt1.pack()
    txt2 = Label(fenetre, text="Veuillez choisir votre Menu Bestof est comparer les prix :")
    txt2.place(x=45, y=40)
     
    var1 = 13
     
    def update_label():
     
        value = m1 * float(menucfg1.get()) + m2 * float(menucfg2.get()) + m3 * float(menucfg3.get()) + m4 * float(menucfg4.get()) + m5 * float(menucfg5.get()) + m6 * float(menucfg6.get()) + m7 * float(menucfg7.get()) + m8 * float(menucfg8.get()) + m9 * float(menucfg9.get()) + m10 * float(menucfg10.get())
        label['text'] = value
     
     
    m1 = 7.2
    menucfg1 = StringVar()
    menucfg1.set(0)
    menu1 = Label(fenetre,text="Big Mac").place(x=75, y=70)
    menuconfig1 = Spinbox(fenetre,from_=0,to=10,increment=1,textvariable=menucfg1,width=2,command=update_label).place(x=45, y=70)
     
     
    m2 = 7.3
    menucfg2 = StringVar()
    menucfg2.set(0)
    menu2 = Label(fenetre, text="Royal Bacon").place(x=75, y=100)
    menuconfig2 = Spinbox(fenetre,from_=0,to=10,increment=1,textvariable=menucfg2,width=2,command=update_label).place(x=45, y=100)
     
    m3 = 7.3
    menucfg3 = StringVar()
    menucfg3.set(0)
    menu3 = Label(fenetre, text="Royal Cheese").place(x=75, y=130)
    menuconfig3 = Spinbox(fenetre,from_=0,to=10,increment=1,textvariable=menucfg3,width=2,command=update_label).place(x=45, y=130)
     
    m4 = 7.7
    menucfg4 = StringVar()
    menucfg4.set(0)
    menu4 = Label(fenetre, text="McWrap Chèvre").place(x=75, y=160)
    menuconfig4 = Spinbox(fenetre,from_=0,to=10,increment=1,textvariable=menucfg4,width=2,command=update_label).place(x=45, y=160)
     
    m5 = 7.2
    menucfg5 = StringVar()
    menucfg5.set(0)
    menu5 = Label(fenetre, text="McChiken").place(x=75, y=190)
    menuconfig5 = Spinbox(fenetre,from_=0,to=10,increment=1,textvariable=menucfg5,width=2,command=update_label).place(x=45, y=190)
     
     
    m6 = 7.3
    menucfg6 = StringVar()
    menucfg6.set(0)
    menu6 = Label(fenetre, text="Royal Deluxe").place(x=210, y=70)
    menuconfig6 = Spinbox(fenetre,from_=0,to=10,increment=1,textvariable=menucfg6,width=2,command=update_label).place(x=180, y=70)
     
    m7 = 7.3
    menucfg7 = StringVar()
    menucfg7.set(0)
    menu7 = Label(fenetre, text="Chicken McNuggets fois 6").place(x=210, y=100)
    menuconfig7 = Spinbox(fenetre,from_=0,to=10,increment=1,textvariable=menucfg7,width=2,command=update_label).place(x=180, y=100)
     
    m8 = 6.95
    menucfg8 = StringVar()
    menucfg8.set(0)
    menu8 = Label(fenetre, text="Filet-O-Fish").place(x=210, y=130)
    menuconfig8 = Spinbox(fenetre,from_=0,to=10,increment=1,textvariable=menucfg8,width=2,command=update_label).place(x=180, y=130)
     
    m9 = 3.05
    menucfg9 = StringVar()
    menucfg9.set(0)
    menu9 = Label(fenetre, text="Double Cheese").place(x=210, y=160)
    menuconfig9 = Spinbox(fenetre,from_=0,to=10,increment=1,textvariable=menucfg9,width=2,command=update_label).place(x=180, y=160)
     
    m10 = 2.3
    menucfg10 = StringVar()
    menucfg10.set(0)
    menu10 = Label(fenetre, text="Cheeseburger").place(x=210, y=190)
    menuconfig10 = Spinbox(fenetre,from_=0,to=10,increment=1,textvariable=menucfg10,width=2,command=update_label).place(x=180, y=190)
     
     
    label = tk.Label()
    update_label()
    label.pack(padx=30,pady=10)
     
     
     
     
     
     
     
    fenetre.mainloop()

Discussions similaires

  1. Class Python Tkinter
    Par Keyve dans le forum Tkinter
    Réponses: 2
    Dernier message: 04/04/2012, 22h06
  2. Python Tkinter graphe
    Par Nifaste dans le forum Tkinter
    Réponses: 17
    Dernier message: 22/12/2009, 11h19
  3. La POO avec python Tkinter
    Par alberth dans le forum Tkinter
    Réponses: 2
    Dernier message: 06/05/2009, 14h53
  4. python, tkinter et les sockets (et les threads)
    Par bomberwaterman dans le forum Réseau/Web
    Réponses: 6
    Dernier message: 02/01/2009, 19h53
  5. Conteneurs en Python Tkinter ?
    Par tuxout dans le forum Tkinter
    Réponses: 2
    Dernier message: 09/04/2007, 18h46

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