IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Récupération d'une variable en frontend pour confirmer un enregistrement dans sqlite [Python 3.X]


Sujet :

Python

  1. #1
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut Récupération d'une variable en frontend pour confirmer un enregistrement dans sqlite
    Bonjour à tous,

    Sujet:
    J'ai 2 fichiers un frontend.py pour tkinter et l'autre main.py.
    Je souhaite confirmer l’enregistrement de ma saisie dans ma database sqlite3.
    j'ai beau créer la variable result et la reprendre dans mon lablelResult, mais j'ai toujours ce message.

    Fichier "C:\DevPython_Santiago\menesis_database_work-02\frontend.py", ligne 70, dans <module>
    labelResult = Label(fenetre, textvariable=result, font=("Arial", 12))

    builtins.NameError: name 'result' is not defined
    Je vous mets mon code ci-dessous

    frontend.py
    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
     
    # -*- coding: utf-8 -*-
     
    from tkinter import *
    from main import * # syntaxe pour appeller un autre fichier py + fonction
    from tkinter import font
     
     
    #================== Création du constructeur graphique =================================
    fenetre =Tk() # Création d'un constructeur
    #champ_label = Label(fenetre, text="Menu") # Création d'un label
    #champ_label.pack() # création de l'impression du label
     
    #======== Dimensionnement de la fenetre =================================================
    # Fonction centrer fenêtre
    screen_x = int(fenetre.winfo_screenwidth())
    screen_y = int(fenetre.winfo_screenheight())
     
    #fenetre_x = 1600
    #fenetre_y = 900
     
    fenetre_x = 800
    fenetre_y = 600
     
    pos_x = (screen_x // 2) - (fenetre_x // 2)
    pos_y = (screen_y // 2) - (fenetre_y // 2)
     
    # Attention le 1er facteur est x ensuite +
    geo = "{}x{}+{}+{}".format(fenetre_x, fenetre_y, pos_x, pos_y)
    fenetre.geometry(geo)
     
    #============= FENETRE FIN ==============================================================
    fenetre.iconbitmap("img/search.ico") ### Changement de l'icone de la fenêtre [l'icone doit être placé dans le répertoire racine de l'application ou un autre répertoire img/...]
     
    #=================== Création d'un menu =================================================
    menubar = Menu(fenetre) # Création de la FRAME pour placer les menus
     
    menuFichier = Menu(menubar, tearoff=0) # Création du menu "Fichier"
    menubar.add_cascade(label="Fichier", menu=menuFichier) # Rattachement des commandes au menu "Fichier"
    menuFichier.add_command(label="Créer")
    menuFichier.add_command(label="Ouvrir",)
    menuFichier.add_command(label="Editer")
    menuFichier.add_separator() # Ligne de séparation
    menuFichier.add_command(label="Quitter", command=fenetre.quit)
     
    menuEdition = Menu(menubar, tearoff=0)
    menubar.add_cascade(label="Edition", menu=menuEdition)
    menuEdition.add_command(label="Couper")
    menuEdition.add_command(label="Copier")
    menuEdition.add_command(label="Coller")
     
    menuAide = Menu(menubar, tearoff=0)
    menubar.add_cascade(label="Aide", menu=menuAide)
    menuAide.add_command(label="A propos")
     
    #=================== Création d'un GRID ================================================
     
    labelAuteur = Label(fenetre, text="auteur", font=("Arial", 12), width="30", height="5")
    labelAuteur.grid(row = 1, column=1, padx = 20)
    entreeAuteur = Entry (fenetre,  width="30")
    entreeAuteur.grid(row = 1, column = 2,) 
     
    labelInfos = Label(fenetre, text="infos", font=("Arial", 12))
    labelInfos.grid(row = 2, column=1, padx = 20)
    entreeInfos = Entry (fenetre)
    entreeInfos.grid(row = 2, column = 2) 
     
    boutonEnregistrer = Button (fenetre, text='Valider', command=lambda : enregister(entreeAuteur.get(), entreeInfos.get()))
    boutonEnregistrer.grid (row = 1, column = 8, padx = 30)
     
    labelResult = Label(fenetre, textvariable=result, font=("Arial", 12))
    labelResult.grid(row = 3, column=1, padx = 20)
     
    #================== FERMETURE DES BOUCLES ==============================================
    fenetre.config(menu=menubar) # Configuration et print menu
    fenetre.mainloop() # Boucle principale
    main.py
    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
     
    # -*- coding: utf-8 -*-
    import sqlite3
     
    #=================== Insertion des données dans database ================================================
    def enregister(auteur, infos,result):
     
            try:                
                    result = StringVar()
                    result.set=("Enregistrement effectué")
                    connection = sqlite3.connect('mnesis.db') # Connection à la BdD
                    cursor = connection.cursor() # création du curseur
                    new_auteur = (cursor.lastrowid, auteur, infos) # Récupération des valeurs des boutons
                    cursor.execute('INSERT INTO tb_auteur VALUES(?,?,?)',new_auteur) # les (?,?,?) représentent les valeurs qui sont renseignées dans la variable new_auteur 
                    print(result)
     
            except Exception as e:
                    print("ERREUR",e)
                    connection.rollback()
            finally:
                    cursor.close()
                    connection.commit() # Valider l'enregistrement dans la database
                    connection.close() ## Fermeture de la connection

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 302
    Points : 6 782
    Points
    6 782
    Par défaut
    Salut,

    Le nom result n'existe pas au démarrage de l'application. Il est créé dans la fonction du second fichier et en plus il n'est pas retourné par celle-ci.

    Tu dois mettre textvariable="" à la création du label et la commande du bouton doit appeler une fonction qui appellera à son tour la fonction enregistrer et ensuite mettra à jour le label avec le retour de cette fonction.

  3. #3
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut Récupération d'une variable en frontend pour confirmer un enregistrement dans sqlite
    Merci beaucoup VinsS

    Mais je passe à python depuis peu, je ne suis pas sûr de tout comprendre.
    Mes autres variables sont bien reprises dans le bouton "Valider"... pourquoi en Python c'est aussi complexe ?
    A moins que je n'ai pas compris la logique !!

    Pouvez-vous m'en dire plus s'il vous plaît, merci beaucoup par avance.

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

    Citation Envoyé par lagratteCchouette Voir le message
    A moins que je n'ai pas compris la logique !!

    Pouvez-vous m'en dire plus s'il vous plaît, merci beaucoup par avance.
    On vous a déjà répondu dans cette discussion. Après soit vous prenez le temps d'ouvrir un tuto. pour apprendre ce que sont les modules Python soit vous persistez à penser en PHP.

    - W

  5. #5
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut Suite
    Bien merci.

    Je comprends, mais je voulais un petit coup de main car je débute, car j'ai lu mais je ne saisi pas tout et j'ai tout essayé avant de poster.
    Voilà c'était simple ma demande et en plus bienveillante

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

    Citation Envoyé par lagratteCchouette Voir le message
    Je comprends, mais je voulais un petit coup de main car je débute, car j'ai lu mais je ne saisi pas tout et j'ai tout essayé avant de poster.
    Ben oui: transformer l'information que vous lisez dans un tuto en connaissances dont vous allez pouvoir tirer profit demande un temps d'apprentissage plus ou moins long suivant les personnes.

    Citation Envoyé par lagratteCchouette Voir le message
    Voilà c'était simple ma demande et en plus bienveillante
    Votre soucis est que vous découpez votre programme en module en pensant PHP: "import" n'est pas "include"... et tant que vous n'aurez pas compris ce que racontent les tutos sur les modules et lesespaces de noms, il vous sera difficile de structurer votre code en modules.
    Ce qui n'est pas bloquant puisque Python ne vous y oblige pas (et qu'en mettant tout dans le même script, çà tomberait en marche)... mais çà demande un vrai effort de compréhension qu'on ne peut faire à votre place (et rabâcher ici ce que vous avez déjà dans les tutos. ne servirait à rien tant que vous n'avez pas essayé de comprendre par vous même).

    - W

  7. #7
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut Remerciements
    Merci pour votre réponse.
    Je vais continuer d'essayer

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 347
    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 347
    Points : 36 870
    Points
    36 870
    Par défaut
    Citation Envoyé par lagratteCchouette Voir le message
    Merci pour votre réponse.
    Je vais continuer d'essayer
    Posez le crayon et essayez de comprendre sur des exemples précis.
    un module f.py:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    a = 10
    def show_f():
         print(a)
    un autre module g.py: contenant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    from f import *
    print(a)
    a = 'xxx'
    show_f()
    print(a)
    devrait vous permettre de constater que le a de g et le a de f ne sont pas les mêmes.
    Et c'est à partir de ce genre d'exemples que vous allez pouvoir comprendre les implications de modules et espaces de noms sur votre code (et le sens des mots/concepts des tutos).

    - W

  9. #9
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut Re...Remerciements
    Merci énormément...
    Je commence à voir... il n'y a plus qu'a...

  10. #10
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut builtins.NameError: name 'auteur' is not defined
    Bonjour,

    Je sais vous allez tous me dire que je dois lire... ce que j'ai fais mais j'ai vraiment besoin d'un coup de main.
    Je deviens fou.

    Voici mon programme que je développe du coup dans un seul fichier tant que je ne suis pas devenu copain avec les modules...

    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
     
    from tkinter import *
    from tkinter import font
    import sqlite3
     
    #=================== Insertion des données dans database ================================================
    def enregister(auteur, infos):
        try:    
            connection = sqlite3.connect('mnesis.db') # Connection à la BdD
            cursor = connection.cursor() # création du curseur
            new_auteur = (cursor.lastrowid, entreeAuteur.get(),entreeInfos.get()) # Récupération des valeurs des boutons
            cursor.execute('INSERT INTO tb_auteur VALUES(?,?,?)',new_auteur) # les (?,?,?) représentent les valeurs qui sont renseignées dans la variable new_auteur 
            print("Enregistrement effectué")
        except Exception as e:
            print("ERREUR",e)
            connection.rollback()
        finally:
            cursor.close()
            connection.commit() # Valider l'enregistrement dans la database
            connection.close() ## Fermeture de la connection
     
     
    #================== Création du constructeur graphique =================================
    fenetre =Tk() # Création d'un constructeur
    #champ_label = Label(fenetre, text="Menu") # Création d'un label
    #champ_label.pack() # création de l'impression du label
     
    #======== Dimensionnement de la fenetre =================================================
    # Fonction centrer fenêtre
    screen_x = int(fenetre.winfo_screenwidth())
    screen_y = int(fenetre.winfo_screenheight())
    fenetre_x = 800
    fenetre_y = 600
     
    pos_x = (screen_x // 2) - (fenetre_x // 2)
    pos_y = (screen_y // 2) - (fenetre_y // 2)
     
    # Attention le 1er facteur est x ensuite +
    geo = "{}x{}+{}+{}".format(fenetre_x, fenetre_y, pos_x, pos_y)
    fenetre.geometry(geo)
     
    #============= FENETRE FIN ==============================================================
    fenetre.iconbitmap("img/search.ico") ### Changement de l'icone de la fenêtre [l'icone doit être placé dans le répertoire racine de l'application ou un autre répertoire img/...]
     
    #=================== Création d'un menu =================================================
    menubar = Menu(fenetre) # Création de la FRAME pour placer les menus
     
    menuFichier = Menu(menubar, tearoff=0) # Création du menu "Fichier"
    menubar.add_cascade(label="Fichier", menu=menuFichier) # Rattachement des commandes au menu "Fichier"
    menuFichier.add_command(label="Créer")
    menuFichier.add_command(label="Ouvrir",)
    menuFichier.add_command(label="Editer")
    menuFichier.add_separator() # Ligne de séparation
    menuFichier.add_command(label="Quitter", command=fenetre.quit)
     
    menuEdition = Menu(menubar, tearoff=0)
    menubar.add_cascade(label="Edition", menu=menuEdition)
    menuEdition.add_command(label="Couper")
    menuEdition.add_command(label="Copier")
    menuEdition.add_command(label="Coller")
     
    menuAide = Menu(menubar, tearoff=0)
    menubar.add_cascade(label="Aide", menu=menuAide)
    menuAide.add_command(label="A propos")
     
    #=================== Création d'un GRID ================================================
     
    labelAuteur = Label(fenetre, text="Auteur", font=("Arial", 12), width="30", height="5")
    labelAuteur.grid(row = 1, column=1, padx = 5)
    entreeAuteur = Entry (fenetre,fg="#ff5733", width="30")
    entreeAuteur.grid(row = 1, column = 2,) 
     
    labelInfos = Label(fenetre, text="Infos", font=("Arial", 12))
    labelInfos.grid(row = 2, column=1, padx = 5)
    entreeInfos = Entry (fenetre)
    entreeInfos.grid(row = 2, column = 2) 
     
    #labelMessage = Label(fenetre, text=print)
    #labelMessage.grid(row=3, column=6)
     
    boutonEnregistrer = Button(fenetre, text=' Valider ', command=enregister(auteur, infos))
    boutonEnregistrer.grid (row = 1, column = 8, padx = 30)
     
    #================== FERMETURE DES BOUCLES ==============================================
    fenetre.config(menu=menubar) # Configuration et print menu
    fenetre.mainloop() # Boucle principale
    Au niveau du bouton enregistrer... quand est le code est celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    boutonEnregistrer = Button(fenetre, text=' Valider ', command=enregister)
    boutonEnregistrer.grid (row = 1, column = 8, padx = 30)
    Python me dit :

    Exception in Tkinter callback
    Traceback (most recent call last):
    File "C:\Users\xxxxxx\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
    TypeError: enregister() missing 2 required positional arguments: 'auteur' and 'infos'
    et quand je l'écris comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    boutonEnregistrer = Button(fenetre, text=' Valider ', command=enregister(auteur, infos))
    boutonEnregistrer.grid (row = 1, column = 8, padx = 30)
    Python me dit :

    Fichier "C:\xxxxxxx\menesis\frontend_db.py", ligne 81, dans <module>
    boutonEnregistrer = Button(fenetre, text=' Valider ', command=enregister(auteur, infos))

    builtins.NameError: name 'auteur' is not defined
    J'en perds mon latin et je n'arrive pas à comprendre.
    CAR POURTANT IL ME SEMBLE AVOIR BIEN COMPRIS, car dans le code ci-dessous tout marche...

    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
     
    # -*- coding: utf-8 -*-
     
    from tkinter import *
    import sqlite3
    from tkinter import font
     
     
    def enregister (): # Création de la fonction "Enregister"
        connection = sqlite3.connect('mnesis.db') # Connection à la BdD
        cursor = connection.cursor() # création du curseur
        new_auteur = (cursor.lastrowid, entreeAuteur.get(),entreeInfos.get()) # Récupération des valeurs des boutons
        cursor.execute('INSERT INTO tb_auteur VALUES(?,?,?)',new_auteur) # les (?,?,?) représentent les valeurs qui sont renseignées dans la variable new_auteur 
        print("Enregistrement effectué")
        cursor.close()
        connection.commit() # Valider l'enregistrement dans la database
        connection.close() ## Fermeture de la connection
     
     
    #================== Création du constructeur graphique =================================
    fenetre =Tk() # Création d'un constructeur
     
    #======== Dimensionnement de la fenetre =================================================
    # Fonction centrer fenêtre
    screen_x = int(fenetre.winfo_screenwidth())
    screen_y = int(fenetre.winfo_screenheight())
    fenetre_x = 800
    fenetre_y = 600
     
    pos_x = (screen_x // 2) - (fenetre_x // 2)
    pos_y = (screen_y // 2) - (fenetre_y // 2)
     
    # Attention le 1er facteur est x ensuite +
    geo = "{}x{}+{}+{}".format(fenetre_x, fenetre_y, pos_x, pos_y)
    fenetre.geometry(geo)
     
    #============= FENETRE FIN ==============================================================
    #fenetre.iconbitmap("img/search.ico") ### Changement de l'icone de la fenêtre [l'icone doit être placé dans le répertoire racine de l'application ou un autre répertoire img/...]
     
    #=================== Création d'un menu =================================================
    menubar = Menu(fenetre) # Création de la FRAME pour placer les menus
     
    menuFichier = Menu(menubar, tearoff=0) # Création du menu "Fichier"
    menubar.add_cascade(label="Fichier", menu=menuFichier) # Rattachement des commandes au menu "Fichier"
    menuFichier.add_command(label="Créer")
    menuFichier.add_command(label="Ouvrir",)
    menuFichier.add_command(label="Editer")
    menuFichier.add_separator() # Ligne de séparation
    menuFichier.add_command(label="Quitter", command=fenetre.quit)
     
    menuEdition = Menu(menubar, tearoff=0)
    menubar.add_cascade(label="Edition", menu=menuEdition)
    menuEdition.add_command(label="Couper")
    menuEdition.add_command(label="Copier")
    menuEdition.add_command(label="Coller")
     
    menuAide = Menu(menubar, tearoff=0)
    menubar.add_cascade(label="Aide", menu=menuAide)
    menuAide.add_command(label="A propos")
     
    #=================== Création d'un GRID ================================================
     
    labelAuteur = Label(fenetre, text="Auteur", fg="#ff5733", bg="#1944f3",font=("Arial", 12), width="30", height="5")
    labelAuteur.grid(row = 1, column=1, padx = 20)
    entreeAuteur = Entry (fenetre,fg="#ff5733", bg="#b14abb",width="30")
    entreeAuteur.grid(row = 1, column = 2,) 
     
    labelInfos = Label(fenetre, text="Infos", font=("Arial", 12))
    labelInfos.grid(row = 2, column=1, padx = 20)
    entreeInfos = Entry (fenetre)
    entreeInfos.grid(row = 2, column = 2) 
     
     
    boutonEnregistrer = Button (fenetre, text=' Valider ', command=enregister)
    boutonEnregistrer.grid (row = 1, column = 8, padx = 30)
     
    #================== FERMETURE DES BOUCLES ==============================================
    fenetre.config(menu=menubar) # Configuration et print menu
    fenetre.mainloop() # Boucle principale

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

    Citation Envoyé par lagratteCchouette Voir le message
    J'en perds mon latin et je n'arrive pas à comprendre.
    CAR POURTANT IL ME SEMBLE AVOIR BIEN COMPRIS, car dans le code ci-dessous tout marche...
    Ici la difficulté est que vous voulez passer des paramètres à votre callback enregistrer alors qu'un callback est à priori une fonction sans paramètre.
    La solution est de passer par une fermeture/closure ou lambda en prenant le temps d'apprendre ce dont il s'agit avec la lecture de cet article de la FAQ.

    - W

  12. #12
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 302
    Points : 6 782
    Points
    6 782
    Par défaut
    Salut,

    Tu n'as aucun besoin de ces paramètres pour ta fonction puisqu'à l'intérieure de celle-ci tu utilises entreeAuteur.get(),entreeInfos.get()

    Comme ces deux Entry sont définies dans l'espace global du programme ça devrait fonctionner tel quel.

  13. #13
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut
    Merci à tous les deux...
    Effectivement en utilisant une fonction "lambda" cela marche, mais je ne devrais pas avoir à le faire puisque tout est défini dans ma fonction "enregistrer"
    Voici mon code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #boutonEnregistrer = Button(fenetre, text=' Valider ', command=enregister)  - code ne marchant pas
    #code fonctionnant...
    boutonEnregistrer = Button (fenetre, text=' Valider ', command=lambda :enregister(entreeAuteur.get(), entreeInfos.get()))
    boutonEnregistrer.grid (row = 1, column = 8, padx = 30)
    J'avoue avoir du mal à saisir la logique de Python, mais c'est peut-être pour cela qu'il doit être puissant.

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 347
    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 347
    Points : 36 870
    Points
    36 870
    Par défaut
    Citation Envoyé par lagratteCchouette Voir le message
    Effectivement en utilisant une fonction "lambda" cela marche, mais je ne devrais pas avoir à le faire puisque tout est défini dans ma fonction "enregistrer"
    Maintenant vous pouvez ré-écrire enregistrer pour qu'elle récupère ses valeurs à partir des paramètres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    sef enregister(auteur, infos):
        try:    
            connection = sqlite3.connect('mnesis.db') # Connection à la BdD
            cursor = connection.cursor() # création du curseur
            new_auteur = (cursor.lastrowid, auteur, infos) # Récupération des valeurs des boutons
            cursor.execute('INSERT INTO tb_auteur VALUES(?,?,?)',new_auteur) # les (?,?,?) représentent les valeurs qui sont renseignées dans la variable new_auteur 
            print("Enregistrement effectué")
        except Exception as e:
            print("ERREUR",e)
            connection.rollback()
        finally:
            cursor.close()
            connection.commit() # Valider l'enregistrement dans la database
            connection.close() ## Fermeture de la connection
    et pousser ce code dans son module à part.

    Citation Envoyé par lagratteCchouette Voir le message
    J'avoue avoir du mal à saisir la logique de Python, mais c'est peut-être pour cela qu'il doit être puissant.
    Quel que soit le langage, il faut du temps pour "penser" dans ce langage.
    Normalement, vous devriez ouvrir un tuto. et avoir la patience d'apprendre.
    Vous voulez faire sans passer par la case "apprendre": beaucoup de choses vous échappent.

    - W

  15. #15
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Maintenant vous pouvez ré-écrire enregistrer pour qu'elle récupère ses valeurs à partir des paramètres:

    Quel que soit le langage, il faut du temps pour "penser" dans ce langage.
    Normalement, vous devriez ouvrir un tuto. et avoir la patience d'apprendre.
    Vous voulez faire sans passer par la case "apprendre": beaucoup de choses vous échappent.
    - W
    Merci pour ces retours, mais ouvrir les tutos c'est ce que je fais et pour comprendre... le temps n'est pas à mon avis le seul facteur.
    Des échanges sur des exemples concrets permettent d’appréhender plus rapidement les rudiments de ces nouveaux paradigmes pour ensuite pouvoir voler de ses propres ailes.
    Au plaisir et je continue à lire... comme vous me l'avez conseillé .

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

Discussions similaires

  1. Récupération d'une variable pour une ligne de code
    Par flo2tours dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 09/04/2014, 17h08
  2. [Dojo] Récupération d'une variable javascript à partir d'un dojo bouton dans php
    Par antoineadb dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 21/11/2012, 12h09
  3. [MySQL] Problème avec la récupération d'une variable dans un lien pour un panier
    Par roy-mustang dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 23/06/2011, 13h58
  4. [AC-2003] Récupération d'une variable pour SQL
    Par gentoo dans le forum IHM
    Réponses: 3
    Dernier message: 11/07/2010, 14h49
  5. [Débutant] récupération d'une variable local pour l'envoyer a un popup
    Par minogttao dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 25/11/2006, 13h58

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