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 :

passage de variables et Tkinter


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 14
    Par défaut passage de variables et Tkinter
    Bonsoir,

    Voilà un bout de code qui va surement en faire hurler quelques uns

    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
     
    # !-*- conding:utf-8 -*-
     
    import sqlite3
    from Tkinter import *
    fen =Tk()
     
    conn = sqlite3.connect("mydb")
    cursor = conn.cursor()
     
    try : # Je cree le fichier
        cursor.execute("""CREATE TABLE papeterie (lib VARCHAR(255) PRIMARY KEY, mont DECIMAL(10, 2))""")
    except: # Sauf s'il existe deja ==> je l'ouvre directement (code provisoire)
        cursor.execute('select * from papeterie')
     
    def enregistre(): #enregistre la saisie
        cursor.execute("INSERT INTO papeterie (lib, mont) VALUES (?, ?)",((m_lib),(m_mont)))
     
    def affiche(): #affiche tout le fichier
        cursor.execute("SELECT * FROM papeterie")
        for line in cursor:
            print(line)
     
    #affiche ecran et saisie
    text1 = Label(fen, text='Veuillez entrer le libelle :')
    text1.grid(row=1, column=1)
     
    text2 = Label(fen, text='Veuillez entrer le montant :')
    text2.grid(row=2, column=1)
     
    m_lib = Entry(fen)
    m_lib.grid( row=1, column=2)
     
    m_mont = Entry(fen)
    m_mont.grid( row=2, column=2)
     
    bout1 = Button(fen,text="valider", command=enregistre)
    bout1.grid( row=3, column=2)
     
    bout2 = Button(fen,text="visualiser le fichier", command=affiche)
    bout2.grid( row=5, column=2)
     
    bout3 = Button(fen, text='quitter', command=fen.quit)
    bout3.grid( row=7, column=2)
     
    fen.mainloop()
     
    conn.commit()
    cursor.close()
    Attention la sortie du programme ne fonctionne pas... Pourquoi ?
    Le passage des variables m_lib et m_mont ne passe pas non plus dans la fonction 'enregistrer' ??? passage de paramêtres ???
    Par contre je suis sauvé par le bouton affichage qui lui au moins ne bloque pas...mais il n'affiche pas grand chose

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Par défaut
    Salut !

    m_lib et m_mont sont des widgets. Ca m'étonnerait fortement que tu puisses les insérer dans une requête SQL, et encore plus que ça soit ce que tu veuilles faire.
    Cherche plutôt du côté de m_lib.get et m_mont.get_int...

    Sinon, tu fais bien d'indiquer que ton except seul est du code provisoire.

  3. #3
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    A propos de ce except, je ne saisis pas bien le concept...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    except: # Sauf s'il existe deja ==> je l'ouvre directement (code provisoire)
        cursor.execute('select * from papeterie')
    Tu l'ouvres directement, ok, tu fais un select dessus, mais dans quel but ? Il n'y a aucune impression des résultats de ce select après.
    Peut-être que tu confonds avec un fichier. Une table, en base de données, n'a pas besoin d'être explicitement ouverte.

    De plus, si on devait l'ouvrir avant de faire un select, et si le moyen de l'ouvrir est de faire un select, euh...

    Pour supprimer ce try/except, tu peux rajouter la clause IF NOT EXISTS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE IF NOT EXISTS papeterie (...)

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cursor.execute("INSERT INTO papeterie (lib, mont) VALUES (?, ?)",((m_lib),(m_mont)))
    ne serait pas plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cursor.execute("INSERT INTO papeterie (lib, mont) VALUES (?, ?)",((m_lib.get),(m_mont.get)))
    ???

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 14
    Par défaut Passages de variables et Tkinter
    Bonsoir,

    Voilà la dernière version :

    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
     
    #-*- conding:utf-8 -*-
    import sqlite3
    from Tkinter import *
    fen =Tk()
     
    conn = sqlite3.connect("mydb")
    cursor = conn.cursor()
     
    # Je cree le fichier
    cursor.execute("""CREATE TABLE IF NOT EXISTS "papeterie" (lib VARCHAR(255) PRIMARY KEY NOT NULL, "mont" DECIMAL(10, 2))""")
     
    def enregistre(): #enregistre la saisie
        cursor.execute("INSERT INTO papeterie (lib, mont) VALUES (?, ?)",((lib.get),(mont.get)))
     
    def affiche(): #affiche tout le fichier
        cursor.execute("SELECT * FROM papeterie")
        for line in cursor:
            print(line)
     
    #affiche ecran et saisie
    text1 = Label(fen, text='Veuillez entrer le libelle :')
    text1.grid(row=1, column=1)
     
    text2 = Label(fen, text='Veuillez entrer le montant :')
    text2.grid(row=2, column=1)
     
    lib = Entry(fen)
    lib.grid( row=1, column=2)
     
    mont = Entry(fen)
    mont.grid( row=2, column=2)
     
    bout1 = Button(fen,text="valider", command=enregistre)
    bout1.grid( row=3, column=2)
     
    bout2 = Button(fen,text="visualiser le fichier", command=affiche)
    bout2.grid( row=5, column=2)
     
    bout3 = Button(fen, text='quitter', command=fen.quit)
    bout3.grid( row=7, column=2)
     
    fen.mainloop()
     
    conn.commit()
    cursor.close()
    Qui me donne le msg d'erreur suivant :
    Exception in Tkinter callback
    Traceback (most recent call last):
    File "C:\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__
    return self.func(*args)
    File "C:\Python31\ex_antoine_935.py", line 13, in enregistre
    cursor.execute("INSERT INTO papeterie (lib, mont) VALUES (?, ?)",((lib.get),(mont.get)))
    InterfaceError: Error binding parameter 0 - probably unsupported type.

    A priori les enregistrements ne se font toujours pas... comment faire ?

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Par défaut
    Citation Envoyé par trombo Voir le message
    Exception in Tkinter callback
    Traceback (most recent call last):
    File "C:\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__
    return self.func(*args)
    File "C:\Python31\ex_antoine_935.py", line 13, in enregistre
    cursor.execute("INSERT INTO papeterie (lib, mont) VALUES (?, ?)",((lib.get),(mont.get)))
    InterfaceError: Error binding parameter 0 - probably unsupported type.
    Dans un shell Python, est-ce que tu peux taper les commandes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    >>> from Tkinter import Entry
    >>> lib = Entry()
    >>> lib.get
    # Résultat à analyser
    >>> lib.get()
    # Résultat à analyser

  7. #7
    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,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def enregistre(lib, mount): #enregistre la saisie
    ...
    bout1 = Button(fen,text="valider", command=lambda: enregistre(lib.get(), mount.get()))
    @+

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 14
    Par défaut
    Bonjour et merci
    En piochant dans vos réponses j'arrive à avancer un peu...
    Mais l'execution du code suivant :

    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
     
    #-*- conding:utf-8 -*-
    import sqlite3
    from tkinter import *
    fen =Tk()
     
    conn = sqlite3.connect("mydb.sqlite")
    cursor = conn.cursor()
     
    # Creation du fichier
    cursor.execute("""CREATE TABLE IF NOT EXISTS "papeterie" (lib VARCHAR(255) PRIMARY KEY NOT NULL , "mont" DECIMAL(10, 2))""")
     
    def enregistre(): #enregistre la saisie
        cursor.execute("INSERT INTO papeterie (lib, mont) VALUES (?, ?)",((lib.get()),(mont.get())))
        #mise a zero des zone de saisie
        maz_zone_saisie()
     
    def liste(): #liste tout le fichier
        cursor.execute("SELECT * FROM papeterie")
        for line in cursor:
            print(line)
     
    def maz_zone_saisie():
    	lib = Entry(fen)
    	lib.grid( row=1, column=2)
    	mont = Entry(fen)
    	mont.grid( row=2, column=2)
     
    #affiche ecran et saisie
    text1 = Label(fen, text='Veuillez entrer le libelle :')
    text1.grid(row=1, column=1)
     
    text2 = Label(fen, text='Veuillez entrer le montant :')
    text2.grid(row=2, column=1)
     
    lib = Entry(fen)
    lib.grid( row=1, column=2)
     
    mont = Entry(fen)
    mont.grid( row=2, column=2)
     
    bout1 = Button(fen,text="valider", command=enregistre)
    bout1.grid( row=3, column=2)
     
    bout2 = Button(fen,text="visualiser le fichier", command=liste)
    bout2.grid( row=5, column=2)
     
    bout3 = Button(fen, text='quitter', command=fen.quit)
    bout3.grid( row=7, column=2)
     
    fen.mainloop()
     
    conn.commit()
    cursor.close()
    produit l'erreur :
    Exception in Tkinter callback
    Traceback (most recent call last):
    File "C:\Python31\lib\tkinter\__init__.py", line 1399, in __call__
    return self.func(*args)
    File "creer_ajout_table.py", line 13, in enregistre
    cursor.execute("INSERT INTO papeterie (lib, mont) VALUES (?, ?)",((lib.get()),(mont.get())))
    sqlite3.IntegrityError: column lib is not unique

    Je peux valider une première fois, et les données sont bien enregistrées, mais au deuxième essai j'ai droit au msg ci-dessus. Pour quelle raison ?

  9. #9
    Membre chevronné
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Par défaut
    Salut,
    Je pense que t'as du essayer de mettre deux fois la même valeur dans ton champ lib, alors que c'est ta clé primaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lib VARCHAR(255) PRIMARY KEY NOT NULL
    La clé primaire de ta table identifie chaque ligne présente dans la table. Celle-ci (la clé primaire) doit donc être unique.
    Ce que je dis est à prendre avec des pincettes, car je suis très loin d'être compétent en BDD.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 14
    Par défaut
    C'est l'impression que j'ai également, mais j'ai essayé toutes sortes d'entrées, y a pas moyen de valider 2 fois de suite. Je peux rajouter article par article au sortant du programme après chaque saisie (pour infos...)

  11. #11
    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,

    Sur ton 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
    #-*- conding:utf-8 -*-
    import sqlite3
    from Tkinter import *
    fen =Tk()
     
    conn = sqlite3.connect("mydb.sqlite")
    cursor = conn.cursor()
     
    # Creation du fichier
    cursor.execute("""CREATE TABLE IF NOT EXISTS "papeterie" (lib VARCHAR(255) PRIMARY KEY NOT NULL , "mont" DECIMAL(10, 2))""")
     
    def enregistre(): #enregistre la saisie
        cursor.execute("INSERT INTO papeterie (lib, mont) VALUES (?, ?)",((lib.get()),(mont.get())))
        #mise a zero des zone de saisie
        lib.delete(0, END)
        mont.delete(0, END)
        lib.focus_set()
     
    def liste(): #liste tout le fichier
        cursor.execute("SELECT * FROM papeterie")
        for line in cursor:
            print(line)
     
    #affiche ecran et saisie
    text1 = Label(fen, text='Veuillez entrer le libelle :')
    text1.grid(row=1, column=1)
     
    text2 = Label(fen, text='Veuillez entrer le montant :')
    text2.grid(row=2, column=1)
     
    lib = Entry(fen)
    lib.grid( row=1, column=2)
     
    mont = Entry(fen)
    mont.grid( row=2, column=2)
     
    bout1 = Button(fen,text="valider", command=enregistre)
    bout1.grid( row=3, column=2)
     
    bout2 = Button(fen,text="visualiser le fichier", command=liste)
    bout2.grid( row=5, column=2)
     
    bout3 = Button(fen, text='quitter', command=fen.quit)
    bout3.grid( row=7, column=2)
     
    lib.focus_set()
     
    fen.mainloop()
     
    conn.commit()
    cursor.close()
    Par contre si tu re rentre une clé qui existe tu te retrouve avec un column lib is not unique.
    A toi de gérer soit avec une recherche de lib avant l'INSERT soit avec un try et une gestion de l'erreur.

    @+

  12. #12
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Le plus simple pour insérer un objet s'il n'existe pas en db, et de le mettre à jour s'il existe, c'est de
    1. Tenter de le mettre à jour
    2. S'il n'y a pas eu de mise à jour (c'est à dire que l'objet n'existait pas), on l'insère

    En d'autres termes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if not db.update(object):
        db.insert(object)
    Après, si on a un champ autoincrémenté, il y a moyen de deviner par un simple test si l'objet est déjà enregistré en db. Je vous laisse chercher comment

  13. #13
    Membre chevronné
    Inscrit en
    Janvier 2007
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 329
    Par défaut
    Juste une remarque : à la fin, il faut faire "conn.close()" au lieu de "cursor.close()"



    -

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 14
    Par défaut toujours passage de variables
    Voilà autre chose

    Le code suivant :
    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
    #-*- conding:utf-8 -*-
    import sqlite3
    from tkinter import *
    fen =Tk()
     
    conn = sqlite3.connect("mydb.sqlite")
    cursor = conn.cursor()
     
    # Creation du fichier
    #cursor.execute("""CREATE TABLE IF NOT EXISTS "papeterie"(lib VARCHAR(255) PRIMARY KEY NOT NULL , "mont" DECIMAL(10, 2))""")
    cursor.execute("""CREATE TABLE IF NOT EXISTS "papeterie"(id integer PRIMARY KEY AUTOINCREMENT,lib VARCHAR(255), "mont" DECIMAL(10, 2))""")
     
    def enregistre(): #enregistre la saisie
    	cursor.execute("INSERT INTO papeterie (lib, mont) VALUES (?, ?)",((lib.get()),(mont.get())))
    	#mise a zero des zone de saisie
    	conn.commit()
    	maz_zone_saisie()
     
    def liste(): #liste tout le fichier
        cursor.execute("SELECT * FROM papeterie")
        for line in cursor:
            print(line)
     
    def maz_zone_saisie():
    	lib = Entry(fen)
    	lib.grid( row=1, column=2)
    	mont = Entry(fen)
    	mont.grid( row=2, column=2)
     
    #affiche ecran et saisie
    text1 = Label(fen, text='Veuillez entrer le libelle :')
    text1.grid(row=1, column=1)
     
    text2 = Label(fen, text='Veuillez entrer le montant :')
    text2.grid(row=2, column=1)
     
    lib = Entry(fen)
    lib.grid( row=1, column=2)
     
    mont = Entry(fen)
    mont.grid( row=2, column=2)
     
    bout1 = Button(fen,text="valider", command=enregistre)
    bout1.grid( row=3, column=2)
     
    bout2 = Button(fen,text="visualiser le fichier", command=liste)
    bout2.grid( row=5, column=2)
     
    bout3 = Button(fen, text='quitter', command=fen.quit)
    bout3.grid( row=7, column=2)
     
    fen.mainloop()
     
    conn.commit()
    conn.close()
    produit ceci :
    >pythonw -u "creer_ajout_table.py"
    (1, 'a', 1)
    (2, 'a', 1)
    (3, 'a', 1)
    (4, 'a', 1)
    >Exit code: 0

    alors que j'ai saisi
    (1, 'a', 1)
    (2, 'b', 2)
    (3, 'c', 3)
    (4, 'd', 4)

    Désolé mais je crois que vous n'en avez pas fini avec moi

  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
    Bonjour,

    Regarde les réponse plus haut.

    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
    #-*- conding:utf-8 -*-
    import sqlite3
    from tkinter import *
    fen =Tk()
     
    conn = sqlite3.connect("mydb.sqlite")
    cursor = conn.cursor()
     
    # Creation du fichier
    #cursor.execute("""CREATE TABLE IF NOT EXISTS "papeterie"(lib VARCHAR(255) PRIMARY KEY NOT NULL , "mont" DECIMAL(10, 2))""")
    cursor.execute("""CREATE TABLE IF NOT EXISTS "papeterie"(id integer PRIMARY KEY AUTOINCREMENT,lib VARCHAR(255), "mont" DECIMAL(10, 2))""")
     
    def enregistre(): #enregistre la saisie
    	cursor.execute("INSERT INTO papeterie (lib, mont) VALUES (?, ?)",((lib.get()),(mont.get())))
    	#mise a zero des zone de saisie
    	conn.commit()
    	maz_zone_saisie()
     
    def liste(): #liste tout le fichier
        cursor.execute("SELECT * FROM papeterie")
        for line in cursor:
            print(line)
     
    def maz_zone_saisie():
        lib.delete(0, END)
        mont.delete(0, END)
        lib.focus_set()
     
    #affiche ecran et saisie
    text1 = Label(fen, text='Veuillez entrer le libelle :')
    text1.grid(row=1, column=1)
     
    text2 = Label(fen, text='Veuillez entrer le montant :')
    text2.grid(row=2, column=1)
     
    lib = Entry(fen)
    lib.grid( row=1, column=2)
     
    mont = Entry(fen)
    mont.grid( row=2, column=2)
     
    bout1 = Button(fen,text="valider", command=enregistre)
    bout1.grid( row=3, column=2)
     
    bout2 = Button(fen,text="visualiser le fichier", command=liste)
    bout2.grid( row=5, column=2)
    	
    bout3 = Button(fen, text='quitter', command=fen.quit)
    bout3.grid( row=7, column=2)
    
    lib.focus_set()
     
    fen.mainloop()
     
    conn.commit()
    conn.close()
    @+

    Petit edit pour explication quand même...

    Avec tes lib = Entry(fen) et mont = Entry(fen) de maz_zone_saisie() tu recrée des widgets avec le même nom mais pour Tkinter ce n'est pas les mêmes.
    Regarde ce que donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def maz_zone_saisie():
        lib = Entry(fen)
        lib.grid( row=1, column=2)
        mont = Entry(fen)
        mont.grid( row=2, column=2)
        print lib
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    print lib
     
    fen.mainloop()
    Comme bout1 = Button(fen,text="valider", command=enregistre) fais référence aux widgets lib et mont créent en premiers tu récupère les premières valeurs.

    Avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        lib.delete(0, END)
        mont.delete(0, END)
    Tu réutilise les mêmes donc tu garde la référence.

    A ce propos fais attention de bien différencier tes variables. C'est source à problèmes (nul n'est infaillible) d'utiliser les mêmes noms. De plus il est bon de différencier/utiliser les locales.

    @+

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 14
    Par défaut
    Bonjour et merci pour votre aide....
    Je lis bien sûr les messages, mais j'ai du mal à appréhender tous les concepts....
    Nouveau problème :
    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
    #python3.1.1 + Tkinter + Sqlite3 avec l'editeur Scite
    #-*- conding:utf-8 -*-
    import sqlite3
    from tkinter import *
    fen =Tk()
     
    #---------------------------------------------------------------
    conn = sqlite3.connect("mydb.sqlite")
    cursor = conn.cursor()
    cursor.execute("""CREATE TABLE IF NOT EXISTS "papeterie"(id integer PRIMARY KEY AUTOINCREMENT,lib VARCHAR(255), "mont" DECIMAL(10, 2))""")
    #---------------------------------------------------------------
     
    def voir_une_ligne():#affichage ligne par ligne
    	cursor.execute("select * from papeterie")
    	print cursor.fetchone()#???????????????SyntaxError: invalid syntax ???????????????????????????
     
    def voir_ligne_choisie():#affichage ligne selon un numero saisi au clavier
    	num = 0
    	cursor.execute("select * from papeterie where id = (?)",((num.get())))
    	for line in cursor:
    		print(line)
     
    def liste():#liste tout le fichier
    	cursor.execute("SELECT * FROM papeterie")
    	for line in cursor:
    		print(line)
     
    def maz_zone_saisie():
    	 lib.delete(0, END)
    	 mont.delete(0, END)
     
    #---------------------------------------------------------------
     
    bout0 = Button(fen,text="voir la ligne courante", command =voir_une_ligne)
    bout0.grid(row=3, column = 2)
     
    bout1 = Button(fen,text="entrez le num de ligne", command =voir_ligne_choisie)
    bout1.grid(row=4, column = 2)
     
    bout2 = Button(fen,text="lister le fichier", command=liste)
    bout2.grid( row=5, column=2)
     
    bout3 = Button(fen, text='quitter', command=fen.quit)
    bout3.grid( row=6, column=2)
    #---------------------------------------------------------------
     
    fen.mainloop()
    conn.commit()
    conn.close()
    Dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    def voir_ligne_choisie():
    on me répond :
    cursor.execute("select * from papeterie where id = (?)",((num.get())))
    AttributeError: 'int' object has no attribute 'get'

    et dans File "visualise_table.py", line 15
    print cursor.fetchone()#???????????????SyntaxError: invalid syntax ???????????????????????????

    Ou sont les erreurs ?

  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
    Bonsoir,

    Citation Envoyé par trombo Voir le message
    Dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    def voir_ligne_choisie():
    on me répond :
    cursor.execute("select * from papeterie where id = (?)",((num.get())))
    AttributeError: 'int' object has no attribute 'get'
    Citation Envoyé par trombo Voir le message
    def voir_ligne_choisie():#affichage ligne selon un numero saisi au clavier
    num = 0 <---- Tu fais de num une variable de type int et tu lui attribut la valeur 0
    cursor.execute("select * from papeterie where id = (?)",((num.get()))) <---- Tu fais un get sur une variable de type int
    for line in cursor:
    print(line)
    Je te laisse le temps pour la seconde

    @+

  18. #18
    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,

    Une petite suggestion :

    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
    #-*- conding:utf-8 -*-
    import sqlite3
    from Tkinter import *
     
    class Globals_Papeterie():
        Index = 1 # Et pas 0
     
    fen =Tk()
     
    #---------------------------------------------------------------
    conn = sqlite3.connect("mydb.sqlite")
    cursor = conn.cursor()
    cursor.execute("""CREATE TABLE IF NOT EXISTS "papeterie"(id integer PRIMARY KEY AUTOINCREMENT,lib VARCHAR(255), "mont" DECIMAL(10, 2))""")
    #---------------------------------------------------------------
     
    def voir_une_ligne():
        print cursor.execute("select * from papeterie").fetchone() # Te donne toujours l'enregistrement 1
     
    def voir_ligne_choisie():
        num = 1
        for line in cursor.execute("select * from papeterie where id = (?)",(str(num))): # str(num) car num est de type int
            print line
     
    def liste():
        for line in cursor.execute("SELECT * FROM papeterie"): print line
        print 'Total : ', cursor.execute("SELECT COUNT(*) FROM papeterie").fetchall()[0][0]
     
    # Sinon puisque tu galere avec les variables regarde ce que donne une classe Globals_Papeterie
     
    def voir_suivant_valeur(Index):
        print Index # A toi de gerer si Index < 0 ou fin de fichier (if). Regarde plus haut.
        print cursor.execute("select * from papeterie where id = (?)",(Index)).fetchall()[0] # Ici Index est deja un string
        Globals_Papeterie.Index = int(Index) # Donne a Globals_Papeterie.Index la valeur de Index (le Rech_Ind.get() donc)
     
    def voir_ligne_par_ligne():
        Globals_Papeterie.Index += 1 # Incremente de 1. A toi de gerer la fin ;).
        print cursor.execute("select * from papeterie where id = (?)",(str(Globals_Papeterie.Index))).fetchall()[0] # Globals_Papeterie.Index en string bien sur
     
    #---------------------------------------------------------------
    Rech_Ind = Entry(fen)
    Rech_Ind.grid( row=1, column=2)
     
    bout0 = Button(fen,text="voir la ligne courante", command =voir_une_ligne)
    bout0.grid(row=3, column = 2)
     
    bout1 = Button(fen,text="entrez le num de ligne", command =voir_ligne_choisie)
    bout1.grid(row=4, column = 2)
     
    bout2 = Button(fen,text="lister le fichier", command=liste)
    bout2.grid( row=5, column=2)
     
    bout3 = Button(fen, text='quitter', command=fen.quit)
    bout3.grid( row=6, column=2)
     
    bout4 = Button(fen,text="voir suivant une entry", command = lambda: voir_suivant_valeur(Rech_Ind.get())) # http://python.developpez.com/faq/?page=Button
    bout4.grid(row=7, column = 2)
     
    bout5 = Button(fen,text="voir l'enregistrement suivant", command =voir_ligne_par_ligne)
    bout5.grid(row=8, column = 2)
    #---------------------------------------------------------------
     
    fen.mainloop()
    conn.commit()
    conn.close()
    @+

    Petit edit pour rajouter une explication

    @++

  19. #19
    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
    Sinon, pour aller plus loin avec cette histoire de classe :

    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
    #-*- conding:utf-8 -*-
    import sqlite3
    from Tkinter import *
     
    class Globals_Papeterie():
        Index = 1 # Et pas 0
        Rech_Ind = None
     
    fen =Tk()
     
    #---------------------------------------------------------------
    conn = sqlite3.connect("mydb.sqlite")
    cursor = conn.cursor()
    cursor.execute("""CREATE TABLE IF NOT EXISTS "papeterie"(id integer PRIMARY KEY AUTOINCREMENT,lib VARCHAR(255), "mont" DECIMAL(10, 2))""")
    #---------------------------------------------------------------
     
    def voir_suivant_valeur():
        cursor.execute("select * from papeterie where id = (?)",(Globals_Papeterie.Rech_Ind.get()))
        print cursor.fetchone()
        print 'Rech_Ind est le widget : ', Globals_Papeterie.Rech_Ind # C'est bien le meme widget
        Globals_Papeterie.Index = int(Globals_Papeterie.Rech_Ind.get())
     
    #---------------------------------------------------------------
    Globals_Papeterie.Rech_Ind = Entry(fen) # Rech_Ind de Globals_Papeterie est maintenant un widget Entry.
    print 'Rech_Ind est le widget : ', Globals_Papeterie.Rech_Ind # Il est identifier par Tkinter
    Globals_Papeterie.Rech_Ind.grid( row=0, column=1)
     
    bout0 = Button(fen,text="voir suivant une entry", command = voir_suivant_valeur)
    bout0.grid(row=1, column = 1)
    #---------------------------------------------------------------
     
    fen.mainloop()
    conn.commit()
    conn.close()
    (Toujours basé sur ton code bien sur)

  20. #20
    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
    Oups...

    Correction d'une erreur (en rouge):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    def voir_une_ligne():
        print cursor.execute("SELECT * FROM papeterie").fetchone() # Te donne toujours l'enregistrement 1
    
    def voir_ligne_choisie():
        num = 10
        for line in cursor.execute("SELECT * FROM papeterie WHERE id = (?)",(str(num),)): # str(num) car num est de type int
            print line
    
    def liste():
        for line in cursor.execute("SELECT * FROM papeterie"): print line
        print 'Total : ', cursor.execute("SELECT COUNT(*) FROM papeterie").fetchall()[0][0]
    
    # Sinon puisque tu galere avec les variables regarde ce que donne une classe Globals_Papeterie
    
    def voir_suivant_valeur(Index):
        if 0 < int(Index) < cursor.execute("SELECT COUNT(*) FROM papeterie").fetchall()[0][0] + 1:
            print cursor.execute("SELECT * FROM papeterie WHERE id = (?)",(Index,)).fetchall()[0] # Ici Index est deja un string
            Globals_Papeterie.Index = int(Index) # Donne a Globals_Papeterie.Index la valeur de Index (le Rech_Ind.get() donc)
    
    def voir_ligne_par_ligne():
        if 0 < Globals_Papeterie.Index < cursor.execute("SELECT COUNT(*) FROM papeterie").fetchall()[0][0]:
            Globals_Papeterie.Index += 1
            print cursor.execute("SELECT * FROM papeterie WHERE id = (?)",(str(Globals_Papeterie.Index),)).fetchall()[0] # Globals_Papeterie.Index en string bien sur
    Désolé.

    @+

Discussions similaires

  1. [langage] Probleme passage de variables entre modules
    Par Ludo167 dans le forum Langage
    Réponses: 4
    Dernier message: 13/08/2004, 12h25
  2. Passage de variable dans un lien asp
    Par VirginieGE dans le forum ASP
    Réponses: 4
    Dernier message: 27/07/2004, 10h06
  3. [Kylix] passage de variable en Libc
    Par zheng dans le forum EDI
    Réponses: 11
    Dernier message: 06/05/2004, 14h14
  4. Passage de variable par methode post ?
    Par oazar dans le forum Flash
    Réponses: 33
    Dernier message: 16/10/2003, 17h03
  5. [langage] Passage de variables...
    Par martijan dans le forum Langage
    Réponses: 8
    Dernier message: 30/07/2003, 09h48

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