Tkinter problème de commande [Résolu]

Signaler
Messages postés
19
Date d'inscription
mardi 20 novembre 2018
Statut
Membre
Dernière intervention
6 novembre 2020
-
Messages postés
651
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
26 novembre 2020
-
Bonjour,
J’ai un programme en tkinter et sqlite3 et le probleme c que ma commande ne s’exécute pas et je compre,d pas pourquoi. Quelqu’un pourrait m’aidez s’il vous plaît ?


import sqlite3
from tkinter import *
fenetre1= Tk()
fenetre1.geometry("380x380+500+200")
fenetre1.resizable(width=NO,height=NO)

Etiquette1=Label(fenetre1,text='Prénom').place(x=100,y=45)
entree1=Entry(fenetre1,width=10)
entree1.insert(0,1)
entree1.place(x=100,y=65)

Etiquette2=Label(fenetre1,text='Age').place(x=200,y=45)
entree2=Entry(fenetre1,width=10)
entree2.insert(0,1)
entree2.place(x=200,y=65)


conn = sqlite3.connect('baseDonnees.db')
cursor = conn.cursor()
cursor.execute("""CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,name TEXT,age INTEGER)""")
conn.commit()

p = Etiquette1
a = Etiquette2


def Creation():
    cursor.execute("""INSERT INTO users(name, age) VALUES(?, ?)""", (p, a))
    conn.commit()

bouton1=Button(fenetre1,text='crée un nouveau compte',command=Creation)
bouton1.place(x=150,y=300)


#Affichage du contenu de la BDD
print('\nContenu : ')
cursor.execute('select * from users')
for records in cursor:
 for k in range (len(records)):
  print(records[k], end = ' ')

cursor.close()
conn.close()
fenetre1.mainloop()


Configuration: iPad / Chrome 77.0.3865.103


6 réponses

Messages postés
651
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
26 novembre 2020
79
Bonjour Kymer,

OK, d'autant que tu avais déjà résolu le problème en mode console
Avec interface graphique, c'est différent, il faut tenir compte de la gestion des évènements

Ce que tu fait dans ton code tel qu'il est actuellement :

1_ Tu crée une fenêtre avec un Label "prénom" et une Entry pour le saisir, et un Label "age" et
une autre Entry pour le saisir

2_ Tu initialise les 2 Entry avec le chiffre 1

3_ Tu crée un bouton pour créer un compte

4_ Ensuite, tu crée la base de données, tu crois que tu récupères p et a:
p = Etiquette1
a = Etiquette2


mais, je te l'ai dit, ce n'est pas comme ça

5_ ensuite tu fermes la connexion à la base de données

6_ quand on clique le bouton, on appelle Creation() qui est censée insérer p et a dans la base,

mais la connexion est déjà fermée ! (point 5 ci -dessus)
Messages postés
651
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
26 novembre 2020
79
Bonjour,

A mon avis, quand on appuie sur le bouton 'crée un nouveau compte' qui lance la fonction

Creation(), la connexion à la BDD est déjà close et donc cursor.execute

ne peut pas se faire...

De plus pour récupérer le contenu des entry, il ne suffit pas de faire:

p = Etiquette1

il existe une méthode Python pour ça
Messages postés
651
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
26 novembre 2020
79
Bonjour,

de plus, c'est le contenu de entree1 et entree2 que tu veux récupérer

pas celui de Etiquette1, Etiquette2 ...
Messages postés
651
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
26 novembre 2020
79
Bonjour Kymer,

Alors as-tu résolu le problème ?
Messages postés
19
Date d'inscription
mardi 20 novembre 2018
Statut
Membre
Dernière intervention
6 novembre 2020

bonjour, excuser moi j'ai un problème avec mon ordinateur du coup il m'est difficile d'avancer.

je vient de voir vos messages et je vais voir se que je peux faire;

encore désoler de vous avoir répondu avec se retard.
Messages postés
19
Date d'inscription
mardi 20 novembre 2018
Statut
Membre
Dernière intervention
6 novembre 2020

bonjour,

D'accord je vois se que tu veux dire, et j'ai réussi.

voici mon code
import sqlite3
from tkinter import *
fenetre1= Tk()
fenetre1.geometry("380x380+500+200")
fenetre1.resizable(width=NO,height=NO)

Etiquette1=Label(fenetre1,text='Prénom').place(x=100,y=45)
entree1=Entry(fenetre1,width=10)
entree1.insert(0,1)
entree1.place(x=100,y=65)

Etiquette2=Label(fenetre1,text='Age').place(x=200,y=45)
entree2=Entry(fenetre1,width=10)
entree2.insert(0,1)
entree2.place(x=200,y=65)


"""p = entree1.get()
a = entree2.get()"""


def Creation():
    p = entree1.get()
    a = entree2.get()
    conn = sqlite3.connect('baseDonnees.db')
    cursor = conn.cursor()
    cursor.execute("""CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,name TEXT,age INTEGER)""")
    conn.commit()
    cursor.execute("""INSERT INTO users(name, age) VALUES(?, ?)""", (p, a))
    conn.commit()
    cursor.close()
    conn.close()

bouton1=Button(fenetre1,text='crée un nouveau compte',command=Creation)
bouton1.place(x=150,y=300)


fenetre1.mainloop()


Messages postés
651
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
26 novembre 2020
79
Hola Kymer,

Dans ta fonction, tu refait la création de la table à chaque fois

Moi, je fait plutôt comme ça:

import sqlite3
from tkinter import *

conn = sqlite3.connect('baseDonnees.db')
cursor = conn.cursor()
cursor.execute("""CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,name TEXT,age INTEGER)""")
conn.commit()

def Creation():
    a = entree2.get()
    p = entree1.get()

    cursor.execute("""INSERT INTO users(name, age) VALUES(?, ?)""", (p, a))
    conn.commit()

    #Affichage du contenu de la BDD
    cursor.execute('select * from users')
    for records in cursor:
        for k in range (len(records)):
            print(records[k], end = ' ')
        print('\n')

def quitter():
    cursor.close()
    conn.close()
    fenetre1.quit()

fenetre1= Tk()
fenetre1.geometry("380x200+500+200")
fenetre1.title('Base de données')

menubar = Menu(fenetre1)
filemenu = Menu(menubar, tearoff=0)
menubar.add_cascade(label="Fichier", menu=filemenu)
filemenu.add_command(label="Quitter", command=quitter)
fenetre1.config(menu=menubar)

Label(fenetre1,text='Prénom').place(x=100,y=45)
entree1=Entry(fenetre1,width=10)
entree1.place(x=100,y=65)
entree1.focus()

Label(fenetre1,text='Age').place(x=200,y=45)
entree2=Entry(fenetre1,width=10)
entree2.place(x=200,y=65)

bouton1=Button(fenetre1,text='Créer un nouveau compte',command=Creation)
bouton1.place(x=100,y=100)

fenetre1.mainloop()