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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 062
    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 062
    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

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