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 :

Bouton incliquable [Débutant(e)]


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Agriculteur
    Inscrit en
    Juillet 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Agriculteur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 39
    Points : 22
    Points
    22
    Par défaut Bouton incliquable
    Bonsoir,

    Je suis en train de réaliser un logiciel simple pour doser les aliments de mes animaux.
    Sauf qu'en tant que débutant en python, je suis bloqué par mes boutons, qui ne lisent pas le script que je leur demande (ou qu'il me semble leur demander....)

    Vu que j'ai trouvé pas mal de réponses sur ce site, je demande de l'aide pour me débloquer !
    Ca doit prendre 30 secondes à un confirmé tellement ça doit être évident

    Voici le script (python 3.2.2)
    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
    97
    98
    99
    # -*- coding: cp1252 -*-
     
     
    from tkinter import*
     
     
     
     
    nomvis1="aliment1"
    nomvis2="aliment2"
    nomvis3="aliment3"
     
     
     
     
     
    police="arial",50
    poids=0
    valeurvis1=0
    valeurvis2=0
    valeurvis3=0
    tare = 0
     
    def commandevis1():
        "changer l'état de la vis 1"
        valeurvis1=1
     
        fen1.destroy
     
    def commandevis2():
        ""
        valeurvis2=1
     
    def commandevis3():
        ""
        valeurvis3=1
     
    def tarage():
        ""
        tare=poids
     
     
    fen1 = Tk()
     
     
    tex1 = Label(fen1, text= str(poids) + ' kg', fg='red',font=police)
    tex1.grid(row=1,column=2)
     
     
    poidspartiel=str(poids-tare)
    tex2 = Label(fen1, text = poidspartiel+' kg', fg='red',font=police)
    tex2.grid(row=2,column=2)
     
     
     
     
     
    boutontare = Button(fen1, text='tare', command = tarage(),font=police)
    boutontare.grid(row=2,column=2)
     
     
    boutonvis1 = Button(fen1, text=nomvis1, command=commandevis1)
    boutonvis1.grid(row=1,column=4)
     
     
    boutonvis2 = Button(fen1, text=nomvis2, command=commandevis2)
    boutonvis2.grid(row=2,column=4)
     
    boutonvis3 = Button(fen1, text=nomvis3, command=commandevis3)
    boutonvis3.grid(row=3,column=4)
     
     
     
    if valeurvis1 :
        statutvis1='allumée'
    else:
        statutvis1=' éteinte'
     
    Label(fen1, text=statutvis1, fg='red',font=police).grid(row=1,column=5)
     
     
     
    if valeurvis2 :
        statutvis2=' allumée'
    else:
        statutvis2=' éteinte'
    Label(fen1, text=statutvis2, fg='red',font=police).grid(row=2,column=5)
     
    if valeurvis2:
        statutvis3=' allumée'
    else:
        statutvis3=' éteinte'
    Label(fen1, text=statutvis3, fg='red',font=police).grid(row=3,column=5)
     
    quit = Button(fen1, text='Quitter', command =fen1.destroy,font=police).grid(row=5,column=6)
     
     
     
    fen1.mainloop()

  2. #2
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    30 seconde sans doute... Légèrement plus pour les explications.

    Généralités:

    Lorsque vous présentez du code sur le forum utilisez la balise code. Vous sélectionnez votre code puis cliquez sur # au dessus de la fenêtre.
    Cela donne:
    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
    97
    98
    99
    # -*- coding: cp1252 -*-
     
     
    from tkinter import*
     
     
     
     
    nomvis1="aliment1"
    nomvis2="aliment2"
    nomvis3="aliment3"
     
     
     
     
     
    police="arial",50
    poids=0
    valeurvis1=0
    valeurvis2=0
    valeurvis3=0
    tare = 0
     
    def commandevis1():
        "changer l'état de la vis 1"
        valeurvis1=1
     
        fen1.destroy
     
    def commandevis2():
        ""
        valeurvis2=1
     
    def commandevis3():
        ""
        valeurvis3=1
     
    def tarage():
        ""
        tare=poids
     
     
    fen1 = Tk()
     
     
    tex1 = Label(fen1, text= str(poids) + ' kg', fg='red',font=police)
    tex1.grid(row=1,column=2)
     
     
    poidspartiel=str(poids-tare)
    tex2 = Label(fen1, text = poidspartiel+' kg', fg='red',font=police)
    tex2.grid(row=2,column=2)
     
     
     
     
     
    boutontare = Button(fen1, text='tare', command = tarage(),font=police)
    boutontare.grid(row=2,column=2)
     
     
    boutonvis1 = Button(fen1, text=nomvis1, command=commandevis1)
    boutonvis1.grid(row=1,column=4)
     
     
    boutonvis2 = Button(fen1, text=nomvis2, command=commandevis2)
    boutonvis2.grid(row=2,column=4)
     
    boutonvis3 = Button(fen1, text=nomvis3, command=commandevis3)
    boutonvis3.grid(row=3,column=4)
     
     
     
    if valeurvis1 :
        statutvis1='allumée'
    else:
        statutvis1=' éteinte'
     
    Label(fen1, text=statutvis1, fg='red',font=police).grid(row=1,column=5)
     
     
     
    if valeurvis2 :
        statutvis2=' allumée'
    else:
        statutvis2=' éteinte'
    Label(fen1, text=statutvis2, fg='red',font=police).grid(row=2,column=5)
     
    if valeurvis2:
        statutvis3=' allumée'
    else:
        statutvis3=' éteinte'
    Label(fen1, text=statutvis3, fg='red',font=police).grid(row=3,column=5)
     
    quit = Button(fen1, text='Quitter', command =fen1.destroy,font=police).grid(row=5,column=6)
     
     
     
    fen1.mainloop()
    Pour ce qui est de command = tarage() comme vous mettez () la fonction tarage est exécutée à la lecture du code. Celle ci ne retournant rien (None) vous avez en fait écrit command=None

    Pour la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    quit = Button(fen1, text='Quitter', command =fen1.destroy,font=police).grid(row=5,column=6)
    Déjà quit n'est pas très heureux comme nom (déjà utilisé), peut être btquit ?
    Mais en fait ici quit = None car grid retourne None.

    Votre souci:
    Ben... les conditions ne sont pas dans les fonctions...
    On pourrais écrire dans un premier temps
    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
    # -*- coding: cp1252 -*-
     
     
    from tkinter import *
     
    nomvis1 = "aliment1"
    nomvis2 = "aliment2"
    nomvis3 = "aliment3"
    police = "arial",50
    poids = 0
    valeurvis1 = 0
    valeurvis2 = 0
    valeurvis3 = 0
    tare = 0
    etatvis = ('éteinte', 'allumée')
     
    def commandevis1():
        "changer l'état de la vis 1"
        global valeurvis1
        if valeurvis1 == 0:
            valeurvis1 = 1
        else:
            valeurvis1 = 0
     
     
    def commandevis2():
        ""
        global valeurvis2
        if valeurvis2 == 0:
            valeurvis2 = 1
        else:
            valeurvis2 = 0
     
    def commandevis3():
        ""
        global valeurvis3
        if valeurvis3 == 0:
            valeurvis3 = 1
        else:
            valeurvis3 = 0
     
    def tarage():
        ""
        tare = poids
     
     
    fen1 = Tk()
    tex1 = Label(fen1, text=str(poids)+' kg', fg='red', font=police)
    tex1.grid(row=1, column=2)
    poidspartiel = str(poids-tare)
    tex2 = Label(fen1, text=poidspartiel+' kg', fg='red', font=police)
    tex2.grid(row=2, column=2)
    boutontare = Button(fen1, text='tare', command=tarage, font=police)
    boutontare.grid(row=2, column=2)
    boutonvis1 = Button(fen1, text=nomvis1, command=commandevis1)
    boutonvis1.grid(row=1, column=4)
    boutonvis2 = Button(fen1, text=nomvis2, command=commandevis2)
    boutonvis2.grid(row=2, column=4)
    boutonvis3 = Button(fen1, text=nomvis3, command=commandevis3)
    boutonvis3.grid(row=3, column=4)
    Label(fen1, text=etatvis[valeurvis1], fg='red', font=police).grid(row=1, column=5)
    Label(fen1, text=etatvis[valeurvis2], fg='red', font=police).grid(row=2, column=5)
    Label(fen1, text=etatvis[valeurvis3], fg='red', font=police).grid(row=3, column=5)
    Button(fen1, text='Quitter', command=fen1.destroy, font=police).grid(row=5, column=6)
    fen1.mainloop()
    Mais... Là il y a un gros souci
    Alors que vous nommez vos Button
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boutonvis3 = Button(fen1, text=nomvis3, command=commandevis3)
    vous ne le faite pas pour vos Label
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Label(fen1, text=etatvis[valeurvis3], fg='red', font=police).grid(row=3, column=5)
    Comment en modifier le texte si vous ne savez pas de quel Label ?
    L'inverse est plus logique car pour les Button une fois command de renseigner pas besoin de référence, pour les Label par contre vous en avez besoin pour changer les texte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Button(fen1, text='tare', command=tarage, font=police).grid(row=2, column=2)
    Button(fen1, text=nomvis1, command=commandevis1).grid(row=1, column=4)
    Button(fen1, text=nomvis2, command=commandevis2).grid(row=2, column=4)
    Button(fen1, text=nomvis3, command=commandevis3).grid(row=3, column=4)
    l1 = Label(fen1, text=etatvis[valeurvis1], fg='red', font=police)
    l1.grid(row=1, column=5)
    l2 = Label(fen1, text=etatvis[valeurvis2], fg='red', font=police)
    l2.grid(row=2, column=5)
    l3 = Label(fen1, text=etatvis[valeurvis3], fg='red', font=police)
    l3.grid(row=3, column=5)
    Et pour changer le texte on utilise Label.config
    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 *
     
    nomvis1 = "aliment1"
    nomvis2 = "aliment2"
    nomvis3 = "aliment3"
    police = "arial",50
    poids = 0
    valeurvis1 = 0
    valeurvis2 = 0
    valeurvis3 = 0
    tare = 0
    etatvis = ('éteinte', 'allumée')
     
    def commandevis1():
        "changer l'état de la vis 1"
        global valeurvis1
        if valeurvis1 == 0:
            valeurvis1 = 1
        else:
            valeurvis1 = 0
        l1.config(text=etatvis[valeurvis1])
     
     
    def commandevis2():
        ""
        global valeurvis2
        if valeurvis2 == 0:
            valeurvis2 = 1
        else:
            valeurvis2 = 0
        l2.config(text=etatvis[valeurvis2])
     
    def commandevis3():
        ""
        global valeurvis3
        if valeurvis3 == 0:
            valeurvis3 = 1
        else:
            valeurvis3 = 0
        l3.config(text=etatvis[valeurvis3])
     
    def tarage():
        ""
        tare = poids
     
     
    fen1 = Tk()
    tex1 = Label(fen1, text=str(poids)+' kg', fg='red', font=police)
    tex1.grid(row=1, column=2)
    poidspartiel = str(poids-tare)
    tex2 = Label(fen1, text=poidspartiel+' kg', fg='red', font=police)
    tex2.grid(row=2, column=2)
    Button(fen1, text='tare', command=tarage, font=police).grid(row=2, column=2)
    Button(fen1, text=nomvis1, command=commandevis1).grid(row=1, column=4)
    Button(fen1, text=nomvis2, command=commandevis2).grid(row=2, column=4)
    Button(fen1, text=nomvis3, command=commandevis3).grid(row=3, column=4)
    l1 = Label(fen1, text=etatvis[valeurvis1], fg='red', font=police)
    l1.grid(row=1, column=5)
    l2 = Label(fen1, text=etatvis[valeurvis2], fg='red', font=police)
    l2.grid(row=2, column=5)
    l3 = Label(fen1, text=etatvis[valeurvis3], fg='red', font=police)
    l3.grid(row=3, column=5)
    Button(fen1, text='Quitter', command=fen1.destroy, font=police).grid(row=5, column=6)
    fen1.mainloop()
    Notes:
    Pour ce qui est de etatvis[valeurvisX] etatvis est un tuple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    etatvis = ('éteinte', 'allumée')
    et valeurvisX un int qui a pour valeur 0 ou 1
    Donc etatvis[valeurvisX] donne la valeur dans etatvis à l'index 0 ou 1.
    Voir les tuples pour plus d'information.

    Vous aurez sans doute remarquer le global dans le code.
    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
    >>> a = 1
    >>> def foo():
    ...     a = 2
    ...     print(a)
    ... 
    >>> foo()
    2
    >>> a
    1
    >>> def foo1():
    ...     global a
    ...     a = 3
    ... 
    >>> foo1()
    >>> a
    3
    Il est possible d'utiliser la classe Variable Tkinter avec le textvariable du Widget Label (Et de se passer ainsi de global). Vu le code je pense que c'est pour plus tard.

    Cela devrais suffire pour un 30 secondes

    @+
    Merci d'utiliser le forum pour les questions techniques.

  3. #3
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Une variante sans le tuple
    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
    # -*- coding: UTF-8 -*-
     
     
    from tkinter import *
     
    poids = 0
    valeurvis1 = 0
    valeurvis2 = 0
    valeurvis3 = 0
    tare = 0
     
    def commandevis1():
        "changer l'état de la vis 1"
        global valeurvis1
        if valeurvis1 == 0:
            valeurvis1 = 1
            l1.config(text='allumée')
        else:
            valeurvis1 = 0
            l1.config(text='éteinte')
     
     
    def commandevis2():
        ""
        global valeurvis2
        if valeurvis2 == 0:
            valeurvis2 = 1
            l2.config(text='allumée')
        else:
            valeurvis1 = 0
            l2.config(text='éteinte')
     
    def commandevis3():
        ""
        global valeurvis3
        if valeurvis3 == 0:
            valeurvis3 = 1
            l3.config(text='allumée')
        else:
            valeurvis1 = 0
            l3.config(text='éteinte')
     
    def tarage():
        ""
        tare = poids
     
     
    fen1 = Tk()
    tex1 = Label(fen1, text=str(poids)+' kg', fg='red', font=("arial", 50))
    tex1.grid(row=1, column=2)
    poidspartiel = str(poids-tare)
    tex2 = Label(fen1, text=poidspartiel+' kg', fg='red', font=("arial", 50))
    tex2.grid(row=2, column=2)
    Button(fen1, text='tare', command=tarage, font=("arial", 50)).grid(row=2, column=2)
    Button(fen1, text="aliment1", command=commandevis1).grid(row=1, column=4)
    Button(fen1, text="aliment2", command=commandevis2).grid(row=2, column=4)
    Button(fen1, text="aliment3", command=commandevis3).grid(row=3, column=4)
    l1 = Label(fen1, text='éteinte', fg='red', font=("arial", 50))
    l1.grid(row=1, column=5)
    l2 = Label(fen1, text='éteinte', fg='red', font=("arial", 50))
    l2.grid(row=2, column=5)
    l3 = Label(fen1, text='éteinte', fg='red', font=("arial", 50))
    l3.grid(row=3, column=5)
    Button(fen1, text='Quitter', command=fen1.destroy, font=("arial", 50)).grid(row=5, column=6)
    fen1.mainloop()
    Merci d'utiliser le forum pour les questions techniques.

  4. #4
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Et une autre variante, pour les méninges.
    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
    from tkinter import *
     
    poids = 0
    valeurvis1 = 0
    valeurvis2 = 0
    valeurvis3 = 0
    tare = 0
    widgetslst = []
     
    def commandevis(i):
        w = widgetslst[i-1]
        if w['text'] == 'éteinte':
            w.config(text='allumée')
        else:
            w.config(text='éteinte')
     
    def tarage():
        ""
        tare = poids
     
     
    fen1 = Tk()
    tex1 = Label(fen1, text=str(poids)+' kg', fg='red', font=("arial", 50))
    tex1.grid(row=1, column=2)
    poidspartiel = str(poids-tare)
    tex2 = Label(fen1, text=poidspartiel+' kg', fg='red', font=("arial", 50))
    tex2.grid(row=2, column=2)
    Button(fen1, text='tare', command=tarage, font=("arial", 50)).grid(row=2, column=2)
    for ind in range(1, 4):
        Button(fen1, text="aliment%d" % ind, command=lambda i=ind: commandevis(i)).grid(row=ind+1, column=4)
        l = Label(fen1, text='éteinte', fg='red', font=("arial", 50))
        l.grid(row=ind+1, column=5)
        widgetslst.append(l)
    Button(fen1, text='Quitter', command=fen1.destroy, font=("arial", 50)).grid(row=5, column=6)
    fen1.mainloop()
    @+
    Merci d'utiliser le forum pour les questions techniques.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Agriculteur
    Inscrit en
    Juillet 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Agriculteur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 39
    Points : 22
    Points
    22
    Par défaut Souci suivant...
    Merci beaucoup pour tes éclaircissements pausekawa ! Et bravo pour la réactivité!
    Par contre ton code ne fonctionnait pas tout le temps pour les boutons vis2 et vis3 (un seul allumé/éteindre puis ne fonctionne plus...)
    Je voyais tout ça un peu plus simple (sorti des programmes de la calculette au lycée !!!)
    Mais je vais pas me dégonfler, c'est pas mon genre. J'ai ré-écrit entièrement le script en utilisant des classes pour les atributs de vis (plus clair). Le script m'affiche les boutons(après au moins 3500 débogages ), mais pas les label. Je ne trouve pas l'erreur.

    HEEELP !!!

    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
     
     
     
     
     
    from tkinter import*
     
    class Etat:
        "etat des vis"
     
    vis1=Etat()
    vis1.marche=0
    vis1.nom="maïs"
     
     
    vis2=Etat()
    vis2.marche=0
    vis2.nom="soja"
     
    vis3=Etat()
    vis3.marche=0
    vis3.nom="Minéral"
     
    def switchvis(self):
        "changement d'état de la vis self"
        fen1.destroy
        if self.marche==0:
            self.marche=1
            mess="on"
        else:
            self.marche=0
            mess="off"
     
     
     
     
        if self==vis1 :
            indice1.configure(text=mess)
            fen1.destroy
        elif self==vis2:
            indice2.configure(text=mess)
     
        else:
            indice3.configure(text=mess)
     
     
    fen1=Tk()
     
    indice1=Label(fen1,text='off')
    indice1.grid(row =1, column =2)
     
    indice2=Label(fen1,text='off')
    indice2.grid(row =2, column =2)
     
    indice3=Label(fen1,text='off')
    indice3.grid(row =3, column =2)
     
    Button(fen1, text=vis1.nom , command=switchvis(vis1)).grid(row=1, column=2)
    Button(fen1, text=vis2.nom , command=switchvis(vis2)).grid(row=2, column=2)
    Button(fen1, text=vis3.nom , command=switchvis(vis3)).grid(row=3, column=2)
     
    fen1.mainloop()

  6. #6
    Membre à l'essai
    Homme Profil pro
    Agriculteur
    Inscrit en
    Juillet 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Agriculteur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 39
    Points : 22
    Points
    22
    Par défaut Bon langage de programmation ?
    A propos : python est-il le langage adapté à des programmes simples comme celui-là ?
    Es-ce un bon outil pour débuter et prendre les bonnes habitudes en programmation ?


    Vu mon niveau, je peux encore me pencher sur autre chose !

  7. #7
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    1) Avez vous remarquer que vos Label sont sous vos Button ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    indice1=Label(fen1,text='off')
    indice1.grid(row =1, column =2)
     
    indice2=Label(fen1,text='off')
    indice2.grid(row =2, column =2)
     
    indice3=Label(fen1,text='off')
    indice3.grid(row =3, column =2)
     
    Button(fen1, text=vis1.nom , command=switchvis(vis1)).grid(row=1, column=2)
    Button(fen1, text=vis2.nom , command=switchvis(vis2)).grid(row=2, column=2)
    Button(fen1, text=vis3.nom , command=switchvis(vis3)).grid(row=3, column=2)
    2) Il viens faire quoi le fen1.destroy dans switchvis ? Je n'en vois pas l'utilité.

    3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    command=switchvis(vis1)
    Du moment ou la fonction est suivit de () elle est évaluée à la lecture du code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> def switchvis(value):
    ...     print(value)
    ... 
    >>> command = switchvis(1)
    1
    Pour palier à ce comportement on utilise une fonction lambda
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> def switchvis(value):
    ...     print(value)
    ... 
    >>> command = switchvis(1)
    1
    >>> command = lambda: switchvis(1)
    >>> command
    <function <lambda> at 0xb73e626c>
    >>> command()
    1
    En Python une fonction retourne toujours quelque chose. Si ce n'est pas spécifier c'est None
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >>> def switchvis(value):
    ...     pass
    ... 
    >>> v = switchvis(1)
    >>> v
    >>> v is None
    True
    >>> def switchvis(value):
    ...     return value
    ... 
    >>> v = switchvis(1)
    >>> v
    1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> def switchvis(value):
    ...     pass
    ... 
    >>> import dis
    >>> dis.dis(switchvis)
      2           0 LOAD_CONST               0 (None) 
                  3 RETURN_VALUE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> def switchvis(value):
    ...     return(value)
    ... 
    >>> dis.dis(switchvis)
      2           0 LOAD_FAST                0 (value) 
                  3 RETURN_VALUE
    Donc command=switchvis(vis1) dans votre code c'est command=None.

    4) def switchvis(self)
    Je veux bien que vous utilisiez une classe pour stocker mais utiliser self en argument d'une fonction...
    En soit self n'est pas un mots réservé du langage mais une convention servant a désigner une instance.
    Utilisez un autre nom pour votre argument.
    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
    def switchvis(v):
        "changement d'état de la vis self"
        if v.marche == 0:
            v.marche = 1
            mess="on"
        else:
            v.marche = 0
            mess="off"
     
        if v == vis1:
            indice1.configure(text=mess)
            fen1.destroy
        elif v == vis2:
            indice2.configure(text=mess)
     
        else:
            indice3.configure(text=mess)
    5) A utiliser une classe (je pense que vous roulez sans permis pour le coup) autant l'utiliser.
    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
    def switchvis(v):
        "changement d'état de la vis v"
        if v.marche == 0:
            v.marche = 1
            mess="on"
        else:
            v.marche = 0
            mess="off"
     
        v.ind.configure(text=mess)
     
     
    fen1 = Tk()
     
    indice1 = Label(fen1, text='off')
    indice1.grid(row=1, column=1)
    vis1.ind = indice1
     
    indice2 = Label(fen1, text='off')
    indice2.grid(row=2, column=1)
    vis2.ind = indice2
     
    indice3 = Label(fen1, text='off')
    indice3.grid(row=3, column=1)
    vis3.ind = indice3
    ---------------------------------------------
    A ce stade on en arrive à
    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
    from tkinter import *
     
    class Etat:
        "etat des vis"
     
    vis1 = Etat()
    vis1.marche = 0
    vis1.nom = "maïs"
     
    vis2 = Etat()
    vis2.marche = 0
    vis2.nom = "soja"
     
    vis3 = Etat()
    vis3.marche = 0
    vis3.nom = "Minéral"
     
    def switchvis(v):
        "changement d'état de la vis self"
        if v.marche == 0:
            v.marche = 1
            mess="on"
        else:
            v.marche = 0
            mess="off"
     
        v.ind.configure(text=mess)
     
     
    fen1 = Tk()
     
    indice1 = Label(fen1, text='off')
    indice1.grid(row=1, column=1)
    vis1.ind = indice1
     
    indice2 = Label(fen1, text='off')
    indice2.grid(row=2, column=1)
    vis2.ind = indice2
     
    indice3 = Label(fen1, text='off')
    indice3.grid(row=3, column=1)
    vis3.ind = indice3
     
    Button(fen1, text=vis1.nom ,command=lambda :switchvis(vis1)).grid(row=1, column=2)
    Button(fen1, text=vis2.nom ,command=lambda :switchvis(vis2)).grid(row=2, column=2)
    Button(fen1, text=vis3.nom ,command=lambda :switchvis(vis3)).grid(row=3, column=2)
     
    fen1.mainloop()
    ---------------------------------------------

    6) L'utilisation d'une classe semble attrayante mais j'aurais quand même préférer que vous utilisiez un autre 'conteneur'.
    Le même code avec une liste
    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
    from tkinter import *
     
     
    def switchvis(v):
        "changement d'état de la vis self"
        if v[0] == 0:
            v[0] = 1
            mess="on"
        else:
            v[0] = 0
            mess="off"
        v[2].configure(text=mess)
     
     
    fen1 = Tk()
     
    indice1 = Label(fen1, text='off')
    indice1.grid(row=1, column=1)
    vis1 = [0, "maïs", indice1] # <<<<<<
    # vis[0] > marche
    # vis[1] > nom
    # vis[2] > Label
     
    indice2 = Label(fen1, text='off')
    indice2.grid(row=2, column=1)
    vis2 = [0, "soja", indice2] # <<<<<<
     
    indice3 = Label(fen1, text='off')
    indice3.grid(row=3, column=1)
    vis3 = [0, "Minéral", indice3] # <<<<<<
     
    Button(fen1, text=vis1[1] ,command=lambda :switchvis(vis1)).grid(row=1, column=2)
    Button(fen1, text=vis2[1] ,command=lambda :switchvis(vis2)).grid(row=2, column=2)
    Button(fen1, text=vis3[1] ,command=lambda :switchvis(vis3)).grid(row=3, column=2)
     
    fen1.mainloop()
    7)
    Citation Envoyé par Farmer64 Voir le message
    A propos : python est-il le langage adapté à des programmes simples comme celui-là ?
    Es-ce un bon outil pour débuter et prendre les bonnes habitudes en programmation ?


    Vu mon niveau, je peux encore me pencher sur autre chose !
    Cela c'est à vous de voir: Soit on accroche, soit pas.
    Perso je pense que c'est un bon langage pour débuter du fait qu'il soit 'conciliant'. Cela permet au 'débutant' d'arriver rapidement à un résultat, ce qui est encourageant.
    Pour ce qui est des bonnes pratiques c'est comme le vélo, cela s'apprend. Vous trouverez des tutos sur le site pour cela. Vu que vous partez sur tkinter je vous suggère celui-ci.

    @+
    Merci d'utiliser le forum pour les questions techniques.

  8. #8
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Petit exercice sur les index au passage
    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
    from tkinter import *
     
    noms = ("maïs", "soja", "Minéral")
    vis = []
     
    def switchvis(v):
        "changement d'état de la vis self"
        if v[0] == 0:
            v[0] = 1
            mess="on"
        else:
            v[0] = 0
            mess="off"
        v[2].configure(text=mess)
     
     
    fen1 = Tk()
     
    for i in range(3):
        indice = Label(fen1, text='off')
        indice.grid(row=i, column=1)
        vis.append([0, noms[i], indice])
        Button(fen1, text=noms[i] ,command=lambda ind=i:switchvis(vis[ind])).grid(row=i, column=2)
     
    fen1.mainloop()
    Edit : Je pousse le bouchon avec -1... Rectification du code.
    Merci d'utiliser le forum pour les questions techniques.

  9. #9
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Citation Envoyé par Farmer64 Voir le message
    Par contre ton code ne fonctionnait pas tout le temps pour les boutons vis2 et vis3 (un seul allumé/éteindre puis ne fonctionne plus...)
    Normal...
    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
    def commandevis2():
        ""
        global valeurvis2
        if valeurvis2 == 0:
            valeurvis2 = 1
            l2.config(text='allumée')
        else:
            valeurvis1 = 0
            l2.config(text='éteinte')
     
    def commandevis3():
        ""
        global valeurvis3
        if valeurvis3 == 0:
            valeurvis3 = 1
            l3.config(text='allumée')
        else:
            valeurvis1 = 0
            l3.config(text='éteinte')

    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
    def commandevis2():
        ""
        global valeurvis2
        if valeurvis2 == 0:
            valeurvis2 = 1
            l2.config(text='allumée')
        else:
            valeurvis2 = 0
            l2.config(text='éteinte')
     
    def commandevis3():
        ""
        global valeurvis3
        if valeurvis3 == 0:
            valeurvis3 = 1
            l3.config(text='allumée')
        else:
            valeurvis3 = 0
            l3.config(text='éteinte')
    Les dangers du cut/paste...
    Merci d'utiliser le forum pour les questions techniques.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Agriculteur
    Inscrit en
    Juillet 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Agriculteur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 39
    Points : 22
    Points
    22
    Par défaut Réponse
    Merci Pausekawa

    En gros

    h12

    1) Avez vous remarquer que vos Label sont sous vos Button ?
    C'estsur que sa s'affiche beaucoup moins bien comme ça !!!

    2) Il viens faire quoi le fen1.destroy dans switchvis ? Je n'en vois pas l'utilité.
    C'était un indicateur à moi : si la fenêtre se fermait la commande s'effectuait... J'ai oublié de la fermer.

    En partant de mon code de départ ca donne
    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
     
     
     
     
     
    from tkinter import*
     
    class Etat:
        "etat des vis"
     
    vis1=Etat()
    vis1.marche=0
    vis1.nom="maïs"
     
     
    vis2=Etat()
    vis2.marche=0
    vis2.nom="soja"
     
    vis3=Etat()
    vis3.marche=0
    vis3.nom="Minéral"
     
    def switchvis(self):
        "changement d'état de la vis self"
        fen1.destroy
        if self.marche==0:
            self.marche=1
            mess="on"
        else:
            self.marche=0
            mess="off"
     
     
     
     
        if self==vis1 :
            indice1.configure(text=mess)
        elif self==vis2:
            indice2.configure(text=mess)
     
        else:
            indice3.configure(text=mess)
     
     
    fen1=Tk()
     
    indice1=Label(fen1,text='off')
    indice1.grid(row =1, column =2)
     
    indice2=Label(fen1,text='off')
    indice2.grid(row =2, column =2)
     
    indice3=Label(fen1,text='off')
    indice3.grid(row =3, column =2)
     
    Button(fen1, text=vis1.nom , command=lambda:switchvis(vis1)).grid(row=1, column=1)
    Button(fen1, text=vis2.nom , command=lambda:switchvis(vis2)).grid(row=2, column=1)
    Button(fen1, text=vis3.nom , command=lambda:switchvis(vis3)).grid(row=3, column=1)
     
    fen1.mainloop()
    Et sa marche !!

    Meric beaucoup pour tout ça ! Par contre j'ai pas compris le fait de mettre 'lambda" dans le bouton, je crée donc une nouvelle discussion : http://www.developpez.net/forums/d12...mmande-bouton/

    A+

  11. #11
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    il reste self...
    Merci d'utiliser le forum pour les questions techniques.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Agriculteur
    Inscrit en
    Juillet 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Agriculteur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 39
    Points : 22
    Points
    22
    Par défaut Avancement - encore pb de bouton
    Bonjour,

    J'ai avancé dans mon script et je cherche à réaliser plusieurs actions avec un clic bouton, y compris la destruction de la fenêtre. J'ai essayé de caser une fonction stopfenetre mais ça m'annonce que fen2 est indéfini !

    Qui peut me déboguer ??


    Extrait du code :

    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
    from tkinter import *
    class Vis():
        ''
    vis1=Vis()
    vis2=Vis()
    vis3=Vis()
     
    vis1.nom="a"
    vis2.nom="b"
    vis3.nom="c"
     
     
    def stopfenetre():
            vis1.ration=E1
            vis2.ration=E2
            vis3.ration=E3
            fen2.destroy
     
     
     
     
     
    "entrer les quantités à mettre"
    fen2=Tk()
    global E1, E2, E3
    E1=Entry(fen2)
    E1.grid(row=1,column=2)
    E2=Entry(fen2)
    E2.grid(row=2,column=2)
    E3=Entry(fen2)
    E3.grid(row=3,column=2)
     
    Label(fen2,text=vis1.nom).grid(row=1,column=1)
    Label(fen2,text=vis2.nom).grid(row=2,column=1)
    Label(fen2,text=vis3.nom).grid(row=3,column=1)
    Button(fen2, text="Valider", command=stopfenetre).grid(row=4, column=2)
    fen2.mainloop()

  13. #13
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Si ce n'est le fen2.destroy() et le global E1, E2, E3 inutile je ne vois pas de contre-indication.
    Par contre, vu l'indentation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def stopfenetre():
            vis1.ration=E1
            vis2.ration=E2
            vis3.ration=E3
            fen2.destroy()
    n'avez vous pas enlever du code avant de poster ?
    Dans le cas contraire pensez bien que l'indentation sous Python c'est 4 espaces.
    Merci d'utiliser le forum pour les questions techniques.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Agriculteur
    Inscrit en
    Juillet 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Agriculteur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 39
    Points : 22
    Points
    22
    Par défaut Suite
    Ok pour le destroy(), sa marche beaucoup mieux là !

    Par contre, il y a-t-il un problème avec global E1, E2, E3 ?

    Et sur mon script il y avait toujours un pb sur l'exécution de la commande, que j'ai résolu en faisant passer la définition de la fonction stopfenêtre juste avant l'appel de la fenêtre, et non au début du programme.

    Pour aperçu, voici le code pour le moment
    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
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
     
     
    from tkinter import*
    class Pesee():
        "différentes pesée"
    poids=Pesee()
    poids.total=0
    poids.partiel=0
    poids.tare=0
     
    class Etat():
        "etat des vis"
     
    vis1=Etat()
    vis1.marche=0
    vis1.nom="maïs"
     
     
     
     
     
     
    vis2=Etat()
    vis2.marche=0
    vis2.nom="soja"
     
    vis3=Etat()
    vis3.marche=0
    vis3.nom="Minéral"
     
    def switchvis(self):
        "changement d'état de la vis self"
        fen1.destroy
        if self.marche==0:
            self.marche=1
            mess="on"
        else:
            self.marche=0
            mess="off"
     
     
     
        if self==vis1 :
            indice1.configure(text=mess)
        elif self==vis2:
            indice2.configure(text=mess)
     
        else:
            indice3.configure(text=mess)
     
     
    def tare():
     
        poids.tare=poids.total
        actualiserpoids(poids.total)
     
     
    def actualiserpoids(x):
        ""
        poids.total=int(x)
        poids.partiel=poids.total-poids.tare
        total.configure(text=str(poids.total)+' Kg')
        partiel.configure(text=str(poids.partiel)+' Kg')
     
     
     
     
     
    def choixration():
        def stopfenetre():
            vis1.ration=E1
            vis2.ration=E2
            vis3.ration=E3
            fen2.destroy()
     
     
        "entrer les quantités à mettre"
        fen2=Tk()
        global E1, E2, E3
        E1=Entry(fen2)
        E1.grid(row=1,column=2)
        E2=Entry(fen2)
        E2.grid(row=2,column=2)
        E3=Entry(fen2)
        E3.grid(row=3,column=2)
     
        Label(fen2,text=vis1.nom).grid(row=1,column=1)
        Label(fen2,text=vis2.nom).grid(row=2,column=1)
        Label(fen2,text=vis3.nom).grid(row=3,column=1)
        Button(fen2, text="Valider", command=stopfenetre).grid(row=4, column=2)
        fen2.mainloop()
     
     
     
     
     
     
     
    fen1=Tk()
     
    indice1=Label(fen1,text='off')
    indice1.grid(row =1, column =4)
     
    indice2=Label(fen1,text='off')
    indice2.grid(row =2, column =4)
     
    indice3=Label(fen1,text='off')
    indice3.grid(row =3, column =4)
     
     
    total=Label(fen1,text='0 Kg')
    total.grid(row =1, column =1)
     
    partiel=Label(fen1,text='0 kg')
    partiel.grid(row =1, column =2)
     
     
     
     
     
     
    Scale(fen1, command=actualiserpoids).grid (row=4, column=1)
     
     
     
     
    Button(fen1, text=vis1.nom , command=lambda:switchvis(vis1)).grid(row=1, column=5)
    Button(fen1, text=vis2.nom , command=lambda:switchvis(vis2)).grid(row=2, column=5)
    Button(fen1, text=vis3.nom , command=lambda:switchvis(vis3)).grid(row=3, column=5)
    Button(fen1, text='tare', command=lambda:tare()).grid(row=2,column=2)
     
    Button(fen1, text='choisir ration', command=lambda:choixration()).grid(row=5,column=5)
     
    Button(fen1, text="quitter", command=fen1.destroy).grid(row=6, column=5) 
    fen1.mainloop()
    Prochaines étapes :
    - Programmer le "remplissage auto" des aliments
    - Améliorer le graphisme pour un style "plein écran"
    - Acheter une carte IO
    - Mettre en relation tout ceci
    Et ma fabrique auto sera prête !!! (ça a l'air si simple...)
    Si ca en intéresse d'autres, je mettrai en ligne les avancées du code.
    Et merci encore à PauseKawa !!!

    @+

  15. #15
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Petite correction de choixration (Jamais deux instances Tk dans le code)
    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
    97
    98
    99
    100
    101
    102
    103
    from tkinter import*
     
     
    class Pesee():
        "différentes pesée"
     
    poids = Pesee()
    poids.total = 0
    poids.partiel = 0
    poids.tare = 0
     
     
    class Etat():
        "etat des vis"
     
     
    vis1 = Etat()
    vis1.marche=0
    vis1.nom="maïs"
     
    vis2 = Etat()
    vis2.marche = 0
    vis2.nom = "soja"
     
    vis3 = Etat()
    vis3.marche = 0
    vis3.nom = "Minéral"
     
     
    def switchvis(self):
        "changement d'état de la vis self"
        fen1.destroy
        if self.marche == 0:
            self.marche = 1
            mess = "on"
        else:
            self.marche = 0
            mess = "off"
        if self == vis1:
            indice1.configure(text=mess)
        elif self == vis2:
            indice2.configure(text=mess)
        else:
            indice3.configure(text=mess)
     
    def tare(): 
        poids.tare = poids.total
        actualiserpoids(poids.total)
     
    def actualiserpoids(x):
        ""
        poids.total = int(x)
        poids.partiel = poids.total-poids.tare
        total.configure(text=str(poids.total)+' Kg')
        partiel.configure(text=str(poids.partiel)+' Kg')
     
    def choixration():
        def stopfenetre():
            vis1.ration = E1.get()
            vis2.ration = E2.get()
            vis3.ration = E3.get()
            fen2.destroy()
     
        "entrer les quantités à mettre"
        fen2 = Toplevel()
        E1 = Entry(fen2)
        E1.grid(row=1, column=2)
        E2 = Entry(fen2)
        E2.grid(row=2, column=2)
        E3 = Entry(fen2)
        E3.grid(row=3, column=2)
        Label(fen2, text=vis1.nom).grid(row=1, column=1)
        Label(fen2, text=vis2.nom).grid(row=2, column=1)
        Label(fen2, text=vis3.nom).grid(row=3, column=1)
        Button(fen2, text="Valider", command=stopfenetre).grid(row=4, column=2)
     
     
    fen1 = Tk()
     
    indice1 = Label(fen1, text='off')
    indice1.grid(row=1, column=4)
     
    indice2 = Label(fen1, text='off')
    indice2.grid(row=2, column=4)
     
    indice3 = Label(fen1, text='off')
    indice3.grid(row=3, column=4)
     
    total = Label(fen1, text='0 Kg')
    total.grid(row=1, column=1)
     
    partiel = Label(fen1, text='0 kg')
    partiel.grid(row=1, column=2)
     
    Scale(fen1, command=actualiserpoids).grid (row=4, column=1)
     
    Button(fen1, text=vis1.nom, command=lambda:switchvis(vis1)).grid(row=1, column=5)
    Button(fen1, text=vis2.nom, command=lambda:switchvis(vis2)).grid(row=2, column=5)
    Button(fen1, text=vis3.nom, command=lambda:switchvis(vis3)).grid(row=3, column=5)
    Button(fen1, text='tare', command=tare).grid(row=2,column=2)
    Button(fen1, text='choisir ration', command=choixration).grid(row=5, column=5)
    Button(fen1, text="quitter", command=fen1.destroy).grid(row=6, column=5)
    fen1.mainloop()
    Merci d'utiliser le forum pour les questions techniques.

  16. #16
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Pour ce qui est de la concaténation du texte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> poids = 10
    >>> text=str(poids)+' Kg'
    >>> text
    '10 Kg'
    >>> text='%d Kg' % poids
    >>> text
    '10 Kg'
    Merci d'utiliser le forum pour les questions techniques.

  17. #17
    Membre à l'essai
    Homme Profil pro
    Agriculteur
    Inscrit en
    Juillet 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Agriculteur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 39
    Points : 22
    Points
    22
    Par défaut Ok
    Ok c'est noté je corrige !

    Merci et @+

Discussions similaires

  1. Pop-up d'une dialog box a partir d'un bouton
    Par bobbyjack dans le forum MFC
    Réponses: 21
    Dernier message: 13/09/2005, 15h32
  2. redémarrer un prog à partir d'un bouton
    Par yokito dans le forum Langage
    Réponses: 5
    Dernier message: 06/09/2002, 13h19
  3. Réponses: 2
    Dernier message: 31/08/2002, 14h00
  4. Bmp pour boutons
    Par Fizgig dans le forum Outils
    Réponses: 5
    Dernier message: 22/08/2002, 10h56
  5. Afficher/Masquer un bouton comme IE 6
    Par benj63 dans le forum C++Builder
    Réponses: 3
    Dernier message: 29/07/2002, 13h12

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