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 :

afficher compteur avec tkinter


Sujet :

Tkinter Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut afficher compteur avec tkinter
    Bonjour,
    débutant en python et tkinter, je voudrais essayer de faire un jeu (le jeu du plus ou moins) avec tkinter: j'y arrive mais je n'arrive pas à afficher un compteur du nombre de coups joués: il reste toujours bloqué sur 1 ou pas du tout:
    voici mon dernier essai: certains mots sont en espagnol car je me suis inspiré d'une vidéo en espagnol que je parle couramment mais si cela gêne je peux retraduire
    merci de votre aide

    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*
     
    import random
    from tkinter.messagebox import*
     
     
    Nb= random.randrange(1,100)
     
     
    def Compteur():
        global Compteur
        Compteur.set(int(Compteur.get())+1)
     
    def obtener():
        valor = CajaNumero.get()
        print(valor.get())
     
    def CplusCmoins():
     
     
        c=0
        Choix=valor.get()
        if Choix < Nb:
            c+=1
     
            a= ('c est plus') 
            #print(a )
            messagebox.showinfo("Resultat:     "," "+ a)
        elif Choix> Nb:
            c+=1
     
            a= ('c est moins')
            #print(a)
            ("Resultat:     "," "+ a)
        else:
            c+=1
     
            a = ('bravo')
            #print(a)
            messagebox.showinfo("Resultat:     "," "+ a)
     
     
    ventana = Tk()
    Choix= IntVar()
     
     
     
     
     
     
    ventana.title("jeu du plus ou moins")
    ventana.geometry('400x400')
     
    fondo=PhotoImage(file="cascade.gif")
    lblFondo=Label(ventana, image=fondo).place(x=0,y=0)
     
     
    # Création d'un widget Button (bouton Quitter)
    BoutonQuitter = Button(ventana, text ='Sortir', command = ventana.destroy)
    BoutonQuitter.pack(side = RIGHT, padx = 10, pady = 10)
    # Création d'un widget Button (bouton Conitunerr)
    BoutonContinuer = Button(ventana, text ='Continuer')
    BoutonContinuer.pack(side = LEFT, padx = 10, pady = 10)
     
    valor = IntVar()
    a= IntVar()
     
     
     
    etiqueta1=Label(ventana,text= "ecris un nombre", fg="red").place(x=10,y=40)                                                                   
    CajaNumero=Entry(ventana,textvariable = valor, width=10).place(x=10, y=60)
     
     
    boton2=Button(ventana, text="valider ",command= CplusCmoins).place(x=10, y=80)
     
    ventana.mainloop()

  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 776
    Points
    36 776
    Par défaut
    Salut,

    Vous choisissez la langue que vous voulez pourvu que ce soit Python

    Voilà comment on peut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >>> import tkinter as tk
    >>> root = tk.Tk()
    >>> compteur = tk.IntVar(value=0)
    >>> tk.Label(textvariable=compteur).pack()
    >>> def do_sortie():
    ...     value = compteur.get()
    ...     if value > 0:
    ...        compteur.set(value-1)
    ...
    >>> tk.Button(text='entree', command=lambda: compteur.set(compteur.get()+1)).pack()
    >>> tk.Button(text='sortie', command=do_sortie).pack()
    >>> tk.mainloop()
    >>>
    et c'est le cut&paste d'un code que j'ai posté il y a peu... dont le sujet était "comment compter".

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

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Vous choisissez la langue que vous voulez pourvu que ce soit Python

    Voilà comment on peut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >>> import tkinter as tk
    >>> root = tk.Tk()
    >>> compteur = tk.IntVar(value=0)
    >>> tk.Label(textvariable=compteur).pack()
    >>> def do_sortie():
    ...     value = compteur.get()
    ...     if value > 0:
    ...        compteur.set(value-1)
    ...
    >>> tk.Button(text='entree', command=lambda: compteur.set(compteur.get()+1)).pack()
    >>> tk.Button(text='sortie', command=do_sortie).pack()
    >>> tk.mainloop()
    >>>
    et c'est le cut&paste d'un code que j'ai posté il y a peu... dont le sujet était "comment compter".

    - W

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    bonsoir
    merci pour votre réponse rapide
    en fait j'avais déjà vu ce code mais je n'arrive pas à faire en sorte que, à chaque fois que le joueur joue un nombre et tant qu'il na pas trouvé le bon nombre, le compteur s'affiche dans une fenêtre et augmente d'un à chaque coup joué
    en fait le mieux que j'arrive à faire, c'est afficher le compteur mais il reste bloqué à 1même si le joueur a joué en 10 coups
    mingote

  5. #5
    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 776
    Points
    36 776
    Par défaut
    Salut,
    Citation Envoyé par mingote Voir le message
    en fait le mieux que j'arrive à faire, c'est afficher le compteur mais il reste bloqué à 1 même si le joueur a joué en 10 coups
    Certes mais difficile (pour moi) de voir comment vous avez essayé de coder l'histoire que vous racontez.

    Dit autrement, c'est quoi le compteur?
    La variable Tk nommé Compteur à laquelle vous n'accédez que dans une fonction homonyme jamais appelée ou la variable locale "c" dans le callback "CplusCmoins()" qui étant locale et jamais testée ne sert à rien?

    Si dans le code que vous postez il n'est pas facile de discerner de quoi vous parlez, çà va pas être facile.

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

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    bonjour
    au départ , j'ai essayé d'afficher mon compteur c:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    c=0
        Choix=valor.get()
        if Choix < Nb:
            c+=1
     
            a= ('c est plus') 
            #print(a )
            messagebox.showinfo("Resultat:     "," "+ a, c)
    mais voici le message que j'obtiens

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "C:\Python34\lib\tkinter\__init__.py", line 1482, in __call__
        return self.func(*args)
      File "C:/Python34/dev.py", line 28, in CplusCmoins
        messagebox.showinfo("Resultat:     "," "+ a, c)
    TypeError: showinfo() takes from 0 to 2 positional arguments but 3 were given
    les 2 definitions 'obtener' et 'compteur ' que j'ai laissées (pour info )sans les appeler c'est que après plusieurs essais infructueux, je n'arrive pas à les utiliser!

  7. #7
    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 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par mingote Voir le message
    mais voici le message que j'obtiens

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "C:\Python34\lib\tkinter\__init__.py", line 1482, in __call__
        return self.func(*args)
      File "C:/Python34/dev.py", line 28, in CplusCmoins
        messagebox.showinfo("Resultat:     "," "+ a, c)
    TypeError: showinfo() takes from 0 to 2 positional arguments but 3 were given
    L'argument que vous devez passer à showinfo est le texte du message que vous voulez que çà affiche. Autrement dit une chaîne de caractères à construire à partir des variables a et c. On peut faire çà comme çà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> fmt = "Resultat:    %s %s"
    >>> a, c = 10, 20
    >>> print (fmt % (a,c))
    Resultat:    10 20
    >>>

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

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    bonsoir, j'ai essayé de modifier comme vous me l'avez suggéré; mon compteur apparait mais il reste figé sur 1
    alors j'ai essayé ce code ci dessous mais du coup il s'incrémente bien mais je ne peux pas sortir tant qu'il n'a pas atteint 25

    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
    def CplusCmoins():
        c=1
        Choix=valor.get()
        while c<25:
     
            if Choix < Nb:
                c+=1
                fmt = "C EST PLUS:  "
                #print (fmt )
                messagebox.showinfo(fmt)
                message=Label(ventana,text=int(c), fg="red").place(x=65,y=75)
            elif Choix> Nb:
                c=c+1
                fmt= "C EST MOINS: "
     
                #print (fmt )
                messagebox.showinfo(fmt)
            else:
                c=c+1
                fmt="BRAVO : "
     
                #print (fmt )
                messagebox.showinfo(fmt)

  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 776
    Points
    36 776
    Par défaut
    Salut,

    "CplusCmoins" est une fonction accessoirement appelée "callback" car appelée lorsqu'on clique sur le bouton "Valider".
    Le seul objet qui est incrémenté dans cette fonction est la variable "c".
    Non seulement c'est une variable "locale" mais en plus vous y assignez "1" au début de la fonction.

    Oubliez tkinter pendant un moment.
    Votre code ne fait guère plus que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> def fonction():
    ...     c = 1
    ...     c += 1
    ...     print (c)
    ...
    >>> fonction()
    2
    >>> fonction()
    2
    >>>
    Si vous voulez que chaque appel à "fonction" incrémente "c" et retrouve la valeur courante au prochain appel, le plus simple est de faire de "c" une variable "globale":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> c = 0
    >>> def fonction():
    ...     global c
    ...     c += 1
    ...     print (c)
    ...
    >>> fonction()
    1
    >>> fonction()
    2
    >>>

    Si vous ne maîtrisez pas encore ces concepts de base, essayer de jouer avec tkinter est peut être un peu ambitieux.

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

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    bonsoir
    voici le code que j'utilise dans python et qui marche très bien mais que je n'arrive pas à faire avec tkinter:

    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
     
    #!/usr/bin/python
    import os
    import random
    from random import randrange
     
    Nb = random.randrange(1,100)
     
    cpt=0
     
    while cpt<25 or Nb!= choix:
        cpt +=1
        choix= int(input("entrez un nombre: "))
        if choix<Nb:
            print("c est plus!, coups joués: ",cpt)
     
        elif choix>Nb:
            print ("c est moins,coups joués:  ",cpt)
     
        else:
            print("bravo!coups joués: ",cpt)
            break
     
     
    # On met en pause le système (Windows)
    os.system("pause")
    je n'arrive pas à afficher mon compteur(cpt) dans un Label de tkinter
    merci encore pour votre aide
    mingote

  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 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par mingote Voir le message
    voici le code que j'utilise dans python et qui marche très bien mais que je n'arrive pas à faire avec tkinter:
    Ce code là ne contient pas encore de fonctions.
    Tant que vous n'êtes pas passé par cette case là, pas facile de comprendre variables globales/locales...

    Modifiez ce code là pour créer une fonction qui prenne en paramètre le nombre joué et qui fasse un boulot semblable à votre fonction CplusCmoins.
    Même sans utiliser tkinter, vous aurez le même soucis côté "compteur"...

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

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    bonsoir
    j'ai suivi votre conseil et mis mes codes sous forme de fonctions:
    une pour le compteur
    une pour 'cpluscmoins'
    par contre dans python, je coder directement, je ne suis pas trop habitué à passer par des fonctions et comment les appeler dans la partie principale
    pouvez-vous me guider
    merci d'avance

    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
     
     -*- coding: utf-8 -*-
    import random
    from random import randint
     
     
     
    ##╦definition des fonctions####
     
    def compteur():
        i=1
        while i<25:
            i=i+1
            print(i)
        continuer=input("continuer: ,<oui, non>")
     
     
    def  cpluscmoins():
        c=0
        continuer="oui"
        Nb=random.randint(1,100)
     
        while continuer == "oui":
            c=c+1
            choix=int(input("un nombre: "))
     
            if choix>Nb:
                print("c'est moins")
                print(c)
            elif choix<Nb:
                print("c'est plus")
                print(c)
            else:
                print("bravo")
                print(c)
                break
        continuer=input("continuer: ,<oui, non>")
     
    ####programme principal####
    print(cpluscmoins())

  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 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par mingote Voir le message
    par contre dans python, je coder directement, je ne suis pas trop habitué à passer par des fonctions et comment les appeler dans la partie principale
    Ce qui explique les difficultés que vous avez avec Tkinter et que global/local ne vous parle pas.

    Passez par des fonctions n'est pas une étape facile à franchir.
    Essentiellement parce que si vos codes marchent bien sans, pourquoi s'em...
    Au début, il faut être un peu volontariste et en fabriquer plus que nécessaire n'est pas si grave.

    Par contre, il faut se familiariser avec le concept et pour çà, il y a des tutos: un cheminement du simple au compliqué que vous pouvez franchir à votre rythme. Ici, nous faisons la publicité pour le Swinnen.

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

Discussions similaires

  1. [Mail] afficher un compteur avec sleep
    Par tonin10 dans le forum Langage
    Réponses: 4
    Dernier message: 02/08/2008, 13h19
  2. Afficher un compteur avec nb de caractères constants
    Par aliassaf dans le forum Général Python
    Réponses: 2
    Dernier message: 22/06/2006, 18h38
  3. [Tkinter] Un petit souçis d'event avec Tkinter
    Par fire.stone dans le forum Tkinter
    Réponses: 4
    Dernier message: 29/10/2005, 20h56
  4. Compteur avec OpenDialog
    Par bajax dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/08/2004, 13h48
  5. afficher texte avec retour chariot aprèq requète sql
    Par frenchy371 dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/01/2004, 17h33

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