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 :

Probleme avec methode dans un Button


Sujet :

Tkinter Python

  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Par défaut Probleme avec methode dans un Button
    Bonjour a tous,

    Quelqu'un peut-il m'expliquer pourquoi je ne peu pas faire entry.delete(0, END) dans un bouton directement.

    Pour que sa soit plus clair je vous met mon code qui ne marche pas:

    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
     
    from tkinter import *
     
    def calcul():
     
        donnee.insert(END, " = " + str(eval(donnee.get())))
     
    root = Tk()
    root.title("Calcul")
     
    donnee = Entry(root, width = 21)
    donnee.pack()
     
    Button(root, width = 5, text = "Calcul", command = calcul).pack(side = LEFT)
    Button(root, width = 5, text = "Clean", command = donnee.delete(0, END)).pack(side = LEFT)
    Button(root, width = 5, text = "Quit", command = root.quit).pack()
     
    root.mainloop()
    root.destroy()
    La seul facon que j'ai trouvé pour que sa marche c'est celle-ci en passant par une fonction:

    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
     
    from tkinter import *
     
    def calcul():
     
        donnee.insert(END, " = " + str(eval(donnee.get())))
     
    def clean():
     
        donnee.delete(0, END)
     
    root = Tk()
    root.title("Calcul")
     
    donnee = Entry(root, width = 21)
    donnee.pack()
     
    Button(root, width = 5, text = "Calcul", command = calcul).pack(side = LEFT)
    Button(root, width = 5, text = "Clean", command = clean).pack(side = LEFT)
    Button(root, width = 5, text = "Quit", command = root.quit).pack()
     
    root.mainloop()
    root.destroy()
    Et autre question, pourquoi je ne peu pu rien faire sur mon Entry si je lui applique la méthode pack directement "Entry(root).pack()" au lieu de passer par sa variable "donnee.pack()"

    C'est deux problème mon donné quelque heure de mal de tête, j'ai fini par trouver la solution, mais je ne comprend pas pourquoi sa marchais pas???

  2. #2
    Membre Expert 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
    Par défaut
    Bonjour,

    Lors de la création du Widget Button une fonction est stockée dans l'option command de celui-ci, que vous le spécifiez ou pas, pour être exécutée lors de l’événement souris.
    En Python si le nom d'une fonction est suivit de () celle ci est exécutée et retourne quelque chose, dans tous les cas. Cela peux être un objet (liste, int, instance, etc...) ou None.
    Lorsque vous écrivez command = donnee.delete(0, END) lors de la création du Button le .delete(0, END) est exécute et son résultat (None) est stocké dans command.
    C'est bien d'avoir trouver la fonction clean(). Vous pouvez aussi utiliser une fonction anonyme avec lambda :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    command = lambda : donnee.delete(0, END)
    Cela reviens à la même chose si ce n'est que la fonction n'est pas nommée pour Python.

    Il en vas de même pour .pack() qui retourne None.
    Dans donnee = Entry(root).pack() donnee==None.

    @+

  3. #3
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Par défaut
    Haaaa, c'est un peu plus clair.

    Et bien pour les intéressés, je vous laisse mon code d'une calculatrice simplifier (j'ai rien inventé, j'ai repris des exemples ici et là)

    C'est une calculatrice très forte, on peut même travailler sur des chaines de caractère si on veux (bien que sa donne pas grand chose... ) Exemple: si on écrit "allo".upper() et bien sa nous donne = ALLO. On peut également obtenir le nombre pi en tapant simplement pi (sans guillemet) et plein d'autre chose comme sa...

    Mon but dans ce programme, était surtout de compacter le code en le moins de ligne possible, donc si quelqu'un a des idées pour le compacter encore plus, j'aimerais bien voir votre 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
     
    from tkinter import *
    from math import *
     
    root = Tk() # Fenetre principal
    root.title("Calcul") # Titre
    #root.resizable(width = 0, height = 0) # Non redimentionable
     
    x, y = 160, 45 # Dimension de "root"
    xScreen, yScreen = root.winfo_screenwidth(), root.winfo_screenheight() # Dimension écran
    root.geometry("%dx%d+%d+%d" % (x, y, xScreen/2 - x/2, yScreen/2 - y/2)) # Centrage de "root" dans l'écran
     
    donnee = Entry(root, width = 26, bg = "light blue") # Zone de saisi
    donnee.pack()
    donnee.focus() # Met le curseur dans "donnee"
     
    # Lorsqu'on appuie sur le bouton, on reprend les valeurs entrées par l'utilisateur dans "donnee"
    # et avec "eval" on effectue l'opération écrite pas l'utilisation (Ex: 10 + 15), on converti cette
    # valeur en string avec "str" et on rajoute avec "insert" le resultat à la fin
    # avec "END" (Ex: 10 + 15 = 25)
    Button(root, width = 5, text = "Calcul", bg = "light grey", command = lambda: donnee.insert(
               END, " = " + str(eval(donnee.get())))).pack(side = LEFT)
     
    # Lorsqu'on appuie sur le bouton, on efface avec "delete" le contenue de "donnee" en partant
    # de l'indice "0" jusqu'a la fin "END"
    Button(root, width = 5, text = "Clean", bg = "light grey", command = lambda: donnee.delete(
               0, END)).pack(side = LEFT)
     
    # Lorsqu'on appuie sur le bouton, on applique la méthode "quit" à la fenêtre principal
    Button(root, width = 5, text = "Quit",  bg = "light grey",
           command = root.quit).pack()
     
    root.mainloop()
    root.destroy()

  4. #4
    Membre Expert 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
    Par défaut
    Citation Envoyé par PascalStl Voir le message
    Mon but dans ce programme, était surtout de compacter le code en le moins de ligne possible
    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
     
    from tkinter import *
     
     
    root = Tk()
    root.title("Calcul")
    root.geometry("%dx%d+%d+%d" % (160, 45, root.winfo_screenwidth()/2-160/2,
                                   root.winfo_screenheight()/2-45/2))
    donnee = Entry(root, width=26, bg="light blue")
    donnee.pack() or donnee.focus()
    for txt, cmd in (("Calcul", lambda: donnee.insert(END, " = "+str(eval(donnee.get())))),
                     ("Clean", lambda: donnee.delete(0, END)),
                     ("Quit", root.destroy)):
        Button(root, width=5, text=txt, bg ="light grey", command=cmd).pack(side=LEFT) 
    root.mainloop()

  5. #5
    Membre Expert 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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    from tkinter import *
     
     
    root = Tk()
    root.geometry("%dx%d+%d+%d" % (160, 45, root.winfo_screenwidth()/2-160/2,
                                   root.winfo_screenheight()/2-45/2)) or root.title("Calcul")
    donnee = Entry(root, width=26, bg="light blue")
    donnee.pack() or donnee.focus()
    for txt, cmd in (("Calcul", lambda: donnee.insert(END, " = "+str(eval(donnee.get())))),
                     ("Clean", lambda: donnee.delete(0, END)),
                     ("Quit", root.destroy)):
        Button(root, width=5, text=txt, bg ="light grey", command=cmd).pack(side=LEFT)
    root.mainloop()
    8 lignes mais bon... Readability counts.

  6. #6
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Par défaut
    pas pire pantoute ,

    Ya juste le "or" dans "donnee.pack() or donnee.focus()" que je comprend pas

    sa veux dire "ou", donc l'ordi exécute soit un ou l'autre, est-ce que c'est sa?

  7. #7
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Par défaut
    J'ai retravaillé sa, puis j'ai un autre problème.

    Je veux que lorsque l'on appuis sur "entré" sa fasse la même chose que lorsque l'on appuis sur calcul, jusque là sa va.

    Mais, lorsque je veux faire pareil pour "clear", avec par exemple la touche supprime (je n'ai pas trouvé la façon correct de l'écrire, alors je l'ai remplacé par F11), j'ai un message d'erreur et je ne comprend pas pourquoi?

    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
     
    from tkinter import *
    from math import *
     
    root = Tk()
    root.title("Calcul") or root.resizable(width = 0, height = 0)
     
    root.geometry("%dx%d+%d+%d" % (160, 45, root.winfo_screenwidth()/2 - 80, root.winfo_screenheight()/2 - 22.5)) # Centrage de "root" dans l'écran
     
    donnee = Entry(root, width = 26, bg = "light blue")
    donnee.bind("<Return>", (lambda event: donnee.insert(END, " = " + str(eval(donnee.get())))))
    donnee.bind("<F11>", (lambda event: donnee.delete(0, END), LEFT))
    donnee.pack() or donnee.focus()
     
    for txt, cmd, place in (("Calcul", lambda: donnee.insert(END, " = " + str(eval(donnee.get()))), LEFT),
                            ("Clean", lambda: donnee.delete(0, END), LEFT),
                            ("Quit", root.destroy, RIGHT)):
     
        Button(root, width = 5, text = txt, bg = "light grey", command = cmd).pack(side = place)
     
    root.mainloop()

  8. #8
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Par défaut
    Finalement, j'ai trouvé pourquoi sa marchais pas pour le bouton "clean", c'étais simplement une erreur de copier-coller (le LEFT a la fin). Désolé pour le dérangement. Et après plusieurs (vraiment plusieurs) recherche, et bien j'ai trouvé comment s’appelait le bouton "supprime" sur mon clavier, c'est "Delete" haha, j'aurais du y penser

    voici, pour ceux que sa interresse le code remanié:

    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 *
    from math import *
     
    root = Tk()
    root.title("Calcul") or root.resizable(width = 0, height = 0)
     
    root.geometry("%dx%d+%d+%d" % (152, 153, root.winfo_screenwidth()/2 - 80, root.winfo_screenheight()/2 - 22.5)) # Centrage de "root" dans l'écran
     
    donnee = Entry(root, width = 26, bg = "light blue")
    donnee.bind("<Return>", (lambda event: donnee.insert(END, " = " + str(eval(donnee.get())))))
    donnee.bind("<Delete>", (lambda event: donnee.delete(0, END)))
    donnee.pack() or donnee.focus()
     
    for txt, cmd, x, y in (("Calcul", lambda: donnee.insert(END, " = " + str(eval(donnee.get()))), 0, 19),
                           ("Clean", lambda: donnee.delete(0, END), 38, 19),
                           ("Quit", root.destroy, 114, 19),
                           ("1", lambda: donnee.insert(END, "1"), 0, 46),
                           ("2", lambda: donnee.insert(END, "2"), 38, 46),
                           ("3", lambda: donnee.insert(END, "3"), 76, 46),
                           ("4", lambda: donnee.insert(END, "4"), 114, 46),
                           ("5", lambda: donnee.insert(END, "5"), 0, 73),
                           ("6", lambda: donnee.insert(END, "6"), 38, 73),
                           ("7", lambda: donnee.insert(END, "7"), 76, 73),
                           ("8", lambda: donnee.insert(END, "8"), 114, 73),
                           ("9", lambda: donnee.insert(END, "9"), 0, 100),
                           ("0", lambda: donnee.insert(END, "0"), 38, 100),
                           (".", lambda: donnee.insert(END, "."), 76, 100),
                           ("EXP", lambda: donnee.insert(END, "**"), 114, 100),
                           ("+", lambda: donnee.insert(END, "+"), 0, 127),
                           ("-", lambda: donnee.insert(END, "-"), 38, 127),
                           ("*", lambda: donnee.insert(END, "*"), 76, 127),
                           ("/", lambda: donnee.insert(END, "/"), 114, 127),):
     
        Button(root, width = 4, text = txt, bg = "light grey", command = cmd).place(x = x, y = y)
     
    root.mainloop()

  9. #9
    Membre Expert 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
    Par défaut
    N'oubliez pas le <KP_Enter> du pavé numérique.
    Évitez le Gestionnaire de géométrie place ici et préférez lui grid qui est plus à sa 'place'.

    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
    root = Tk()
    donnee = Entry(root, width=26, bg="light blue")
    for ev, cmd in (("<Return>", lambda e: donnee.insert(END, " = " + str(eval(donnee.get())))),
                    ("<KP_Enter>", lambda e: donnee.insert(END, " = " + str(eval(donnee.get())))),
                    ("<Delete>", lambda e: donnee.delete(0, END))):
        donnee.bind(ev, cmd)
    donnee.grid(row=0, column=0, columnspan=4, sticky=EW, pady=5) or donnee.focus()
    for txt, cmd, x, y in (("Calcul", lambda: donnee.insert(END, " = " + str(eval(donnee.get()))), 1, 0),
                           ("Clean", lambda: donnee.delete(0, END), 1, 1),
                           ("Quit", root.destroy, 1, 3),
                           ("1", lambda: donnee.insert(END, "1"), 2, 0),
                           ("2", lambda: donnee.insert(END, "2"), 2, 1),
                           ("3", lambda: donnee.insert(END, "3"), 2, 2),
                           ("4", lambda: donnee.insert(END, "4"), 2, 3),
                           ("5", lambda: donnee.insert(END, "5"), 3, 0),
                           ("6", lambda: donnee.insert(END, "6"), 3, 1),
                           ("7", lambda: donnee.insert(END, "7"), 3, 2),
                           ("8", lambda: donnee.insert(END, "8"), 3, 3),
                           ("9", lambda: donnee.insert(END, "9"), 4, 0),
                           ("0", lambda: donnee.insert(END, "0"), 4, 1),
                           (".", lambda: donnee.insert(END, "."), 4, 2),
                           ("EXP", lambda: donnee.insert(END, "**"), 4, 3),
                           ("+", lambda: donnee.insert(END, "+"), 5, 0),
                           ("-", lambda: donnee.insert(END, "-"), 5, 1),
                           ("*", lambda: donnee.insert(END, "*"), 5, 2),
                           ("/", lambda: donnee.insert(END, "/"), 5, 3)): 
        Button(root, width=4, text=txt, bg="light grey", command=cmd).grid(row=x, column=y)
    root.update()
    root.geometry("%dx%d+%d+%d" % (root.winfo_reqwidth(), root.winfo_reqheight(),
                                   root.winfo_screenwidth()/2 - root.winfo_reqwidth()/2,
                                   root.winfo_screenheight()/2 - root.winfo_reqheight()/2))
    root.title("Calcul") or root.resizable(width=0, height=0) 
    root.mainloop()
    Vous pouvez commencer a réfléchir aux erreurs de saisie possibles.

    @+

  10. #10
    Membre Expert 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
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    Vous pouvez commencer a réfléchir aux erreurs de saisie possibles.
    Je vous conseille de vous intéresser a la validation du Widget Entry. Avec la logique booléenne (or/and) et lambda vous devriez avoir du code intéressant dans le style le moins de ligne possible.

    @++ et bon code

  11. #11
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Par défaut
    Merci pour les conseils , je vais explorer sa.

    Note: pour le KP_Enter, moi sa marche sans chez nous, peu importe sur quel Enter j’appuie. Est-ce que c'est pareil chez vous?

  12. #12
    Membre Expert 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
    Par défaut
    Pour KP_Enter c'est os/système dépendant.
    Chez moi sous un Windows XP en virtualbox par exemple "<Return>" est suffisant mais sur ma Dedian "<KP_Enter>" est nécessaire.
    Utile ou pas ? A vous de voir.

  13. #13
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Par défaut
    Autre question tant qu'a être dans le principe de raccourcir du code.

    J'étais entrain de me faire un autre logiciel pour ma gestion de mes factures et l'enregistrement et tout... En m'inspirant du principe des boucles for pour raccourcir tout sa, comme vous me l'avez montré.

    j'ai donc créé des entry et utilisé une liste pour les mettre dedans dans le but de les réutiliser. Comme ceci dans le fond : liste[x].append(Entry...) et le récupérer comme ceci liste[x].pack()...

    Tout marche bien, sauf pour ma fonction lambda qui inscris la date du jour dans un des entry, rien ne se passe, même pas un message d'erreur???

    Voici le code: (ne vous souciez pas de la fonction save je l'ai pas encore modifier)

    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
     
    from tkinter import *
    from time import strftime, gmtime
    import pickle
     
    def save():
        liste = [date.get(), fournisseur.get(), montant.get(), confirmation.get()]
        fichier = open("donnees.txt", "w")
        fichier.write(str(liste))
        fichier.close()
     
    def annule():
        None
     
    def consult():
        None
     
    def nomFourEdit():
        None
     
    def dateEdit():
        None
     
    # -----------------------------Programme principal----------------------------#
     
    #Fenetre principal
    fen = Tk()
    fen.title("Gestionnaire de facture")
     
    #Calcul la position de la fenetre
    fen.geometry("%dx%d+%d+%d" % (290, 280, fen.winfo_screenwidth()/2 - 145, fen.winfo_screenheight()/2 - 140)) #dimension et position
    fen.resizable(width = 0, height = 0) #Non redimensionnable
     
    # Définition de tout les label et leurs emplacement
    for txt, y in (("Date", 5),
                   ("Nom du fournisseur", 45),
                   ("Montant", 85),
                   ("Num. de confirmation", 125),
                   ("Description", 165)):
     
        Label(fen, text = txt, width = 30, anchor = W).place(x = 5, y = y)
     
    # Définition de tout les entry et leurs emplacement
    listeEntry = []
     
    for taille in ((21), (21), (30), (30)):
     
        listeEntry.append(Entry(fen, width = taille))
     
    lambda: listeEntry[0].insert(strftime("20%y/%m/%d", gmtime()))
     
    for i, y in((0, 25), (1, 65), (2, 105), (3, 145)):
     
        listeEntry[i].place(x = 5, y = y)
     
    # Définition de tout les boutons et leurs emplacement
    for txt, taille, cmd, x, y in (("Edit", 6, dateEdit, 137, 20),
                                   ("Edit", 6, nomFourEdit, 137, 60),
                                   ("Traiter", 10, save, 200, 5),
                                   ("Annuler", 10, annule, 200, 30),
                                   ("Consulter", 10, consult, 200, 55),
                                   ("Quitter", 10, fen.destroy, 200, 80)):
     
        Button(fen, text = txt, width = taille, command = cmd).place(x = x, y = y)
     
    #Espace pour la description
    Text(fen, width = 22, height = 5, wrap = WORD).place(x = 5, y = 185)
     
    fen.mainloop()

  14. #14
    Membre Expert 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
    Par défaut
    Pourquoi lambda ? Un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listeEntry[0].insert(0, strftime("20%y/%m/%d", gmtime()))
    est largement suffisant.

    Sinon lambda est une fonction donc pour l’exécuter c'est ()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> lambda : print('lambda')
    <function <lambda> at 0x7fec6c19fb00>
    >>> Foo = lambda : print('lambda')
    >>> Foo()
    lambda
    >>> (lambda : print('lambda'))()
    lambda
    comme pour toute fonction en Python.

    Pour .insert(pos, txt) n'oubliez pas la position dans l'Entry
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listeEntry[0].insert(0, strftime("20%y/%m/%d", gmtime()))
    Oubliez place !
    Voici ce que donne votre code pour moi
    Nom : place.jpg
Affichages : 72
Taille : 26,5 Ko
    .grid() correspond parfaitement aux besoins de votre code.

    @+

  15. #15
    Membre Expert 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
    Par défaut
    le sujet étant Probleme avec methode dans un Button il serait bon d'en créer un autre pour vos prochaines questions : c'est plus sympa pour les recherches sur le forum

    @+ et bon code

  16. #16
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Par défaut
    A ben oui, j'avais même pas pensé que j'avais pas besoin du lambda

    Des fois quand on cherche trop l'arbre nous cache la forêt

    désolé pour le place, j'ai oublier de l'enlever, je change sa toute suite

    Merci pour tes réponses , comment on fait pour marquer le sujet "résolu"?

  17. #17
    Membre Expert 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
    Par défaut
    Ben... Bouton Résolu (Sous Livres Python).

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

Discussions similaires

  1. probleme avec methode get
    Par Tr@nkill dans le forum ASP
    Réponses: 2
    Dernier message: 12/05/2005, 13h54
  2. Probleme avec guillemets dans commande HREF
    Par angelevil dans le forum ASP
    Réponses: 4
    Dernier message: 02/05/2005, 19h06
  3. [ADO.NET] Problème avec Insert dans base de données
    Par mpascolo dans le forum Accès aux données
    Réponses: 9
    Dernier message: 24/01/2005, 09h36
  4. [C#] Probleme avec TextBox dans un DataGrid
    Par Oberown dans le forum ASP.NET
    Réponses: 4
    Dernier message: 21/12/2004, 16h05
  5. [langage] Probleme avec caractère '$' dans script Perl
    Par zouetchou dans le forum Langage
    Réponses: 11
    Dernier message: 24/07/2004, 15h35

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