Connecter un toplevel à MYSQL

Le
ookahh Hors ligne
Bonjour,
Je réalise un programme avec TKinter relié à une base de donnée MYSQL
. Le problème c'est que je n'arrive pas à utiliser ces Entry. J'ai le message d'erreur suivant: NameError: global name 'mon_entry' is not defined, lorsque j'enregistre les données
Quel est le probleme?
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Eric Brunel
Le #23083291
In article ookahh
Bonjour,
Je réalise un programme avec TKinter relié à une base de donnée MYSQL
Le problème c'est que je n'arrive pas à utiliser ces Entry. J'ai le message
d'erreur suivant: NameError: global name 'mon_entry' is not defined, lorsque
j'enregistre les données
Quel est le probleme?



Sans avoir plus de détails sur le code, ça va être très très difficile à
direŠ A tout hasard, je dirais une variable mon_entry initialisée dans
une fonction et pas déclarée en global, mais ça peut être des dizaines
d'autres choses. Tu pourrais nous faire un petit code qui montre le
problème et le poster ici? Sinon, on ne pourra pas t'aider.
- Eric -
ookahh Hors ligne
Le #23085401
Eric Brunel a écrit le 03/02/2011 à 17h22 :
In article ,
ookahh wrote:

Bonjour,
Je réalise un programme avec TKinter relié à une base de
donnée MYSQL
Le problème c'est que je n'arrive pas à utiliser ces Entry. J'ai
le message
d'erreur suivant: NameError: global name 'mon_entry' is not defined, lorsque
j'enregistre les données
Quel est le probleme?




Sans avoir plus de détails sur le code, ça va être
très très difficile à
direŠ A tout hasard, je dirais une variable mon_entry initialisée
dans
une fonction et pas déclarée en global, mais ça peut
être des dizaines
d'autres choses. Tu pourrais nous faire un petit code qui montre le
problème et le poster ici? Sinon, on ne pourra pas t'aider.
- Eric -


voici le code:

#! /usr/bin/python
#-*- coding:Utf-8-*-

from Tkinter import *
import MySQLdb

def new1():
fen1=Toplevel()
fen1.title("Personne")
fen1.grab_set()
fen1.focus_set()
fen1.geometry("400x300")
fen1.resizable(False,False)

tex1 = Label (fen1, text='N°:')
tex2 = Label (fen1, text = 'Nom:')
tex3 = Label (fen1, text = 'Prenoms:')
edt1 = Entry (fen1, bg = 'green')
edt2 = Entry (fen1, bg = 'green')
edt3 = Entry (fen1, bg = 'green')
Button0 = Button (fen1, text = 'OK', command = save)

tex1.grid(row =0, column =0, sticky = W)
tex2.grid(row =1, column =0, sticky = W)
tex3.grid(row =2, column =0, sticky = W)
edt1.grid(row =0, column =1)
edt2.grid(row =1, column =1)
edt3.grid(row =2, column =1)
Button0.grid(row =3, column =1)

def save():

id = edt1.get()
nom = edt2.get()
prenom = edt3.get()
myquery = "INSERT INTO essai.personne (id, nom, prenom) VALUES ('"+id+"','"+nom+"','"+prenom+"')"
db = MySQLdb.connect(host='localhost', user='root', passwd='', db='essai')
curs = db.cursor()
curs.execute(myquery)
curs.close()
db.commit()


#.......Programme pincipale........

fen=Tk()
fen.title("Formulaire principale")
fen.grab_set()
fen.focus_set()
fen.geometry("500x400")
fen.resizable(False,False)


# Création de la barre de menu:
menu1 = Menu(fen)

# Création du menu fichier:
fichier = Menu(menu1, tearoff=0)
menu1.add_cascade(label="Fichier",menu=fichier)
fichier.add_command(label="Quit", commandþn.quit)

cascad = Menu(menu1, tearoff=0)
menu1.add_cascade(label="Formulaire",menuÊscad)

personne = Menu(cascad, tearoff=0)
cascad.add_command(label="Personne",command=new1 )

# afficher le menu
fen.config(menu=menu1)

mainloop ()


le programme affiche ne pas reconnaître les Entry (edt1,edt2,edt3)

ci cela peut vous aider.
Eric Brunel
Le #23085841
In article ookahh
voici le code:

#! /usr/bin/python
#-*- coding:Utf-8-*-

from Tkinter import *
import MySQLdb

def new1():
fen1=Toplevel()
fen1.title("Personne")
fen1.grab_set()
fen1.focus_set()
fen1.geometry("400x300")
fen1.resizable(False,False)

tex1 = Label (fen1, text='N°:')
tex2 = Label (fen1, text = 'Nom:')
tex3 = Label (fen1, text = 'Prenoms:')
edt1 = Entry (fen1, bg = 'green')



Ici, edt1 est créée comme une variable locale à la fonction new1. Cette
variable disparaîtra dès que la fonction new1 sera terminée.

edt2 = Entry (fen1, bg = 'green')
edt3 = Entry (fen1, bg = 'green')
Button0 = Button (fen1, text = 'OK', command = save)

tex1.grid(row =0, column =0, sticky = W)
tex2.grid(row =1, column =0, sticky = W)
tex3.grid(row =2, column =0, sticky = W)
edt1.grid(row =0, column =1)
edt2.grid(row =1, column =1)
edt3.grid(row =2, column =1)
Button0.grid(row =3, column =1)

def save():

id = edt1.get()



Ici, la méthode get est appelée sur edt1 qui n'existe plus, ni en local,
ni en global. Donc erreur:
NameError: global name 'edt1' is not defined

Le problème sera le même avec toutes les variables initialisées dans
new1 et utilisées dans saveŠ

nom = edt2.get()
prenom = edt3.get()
myquery = "INSERT INTO essai.personne (id, nom, prenom) VALUES
('"+id+"','"+nom+"','"+prenom+"')"
db = MySQLdb.connect(host='localhost', user='root', passwd='', db='essai')
curs = db.cursor()
curs.execute(myquery)
curs.close()
db.commit()


[snip]

La solution est simple: déclarer dans new1 que les variables utilisées
ailleurs sont globales, et pas locales à la fonction. Cela se fait
simplement en faisant:

def new1():
global edt1, edt2, edt3
fen1=Toplevel()
(etcŠ même code qu'avant)

HTH
- Eric -
ookahh Hors ligne
Le #23085931
Eric Brunel a écrit le 04/02/2011 à 14h24 :
In article ,
ookahh wrote:
voici le code:

#! /usr/bin/python
#-*- coding:Utf-8-*-

from Tkinter import *
import MySQLdb

def new1():
fen1=Toplevel()
fen1.title("Personne")
fen1.grab_set()
fen1.focus_set()
fen1.geometry("400x300")
fen1.resizable(False,False)

tex1 = Label (fen1, text='N°:')
tex2 = Label (fen1, text = 'Nom:')
tex3 = Label (fen1, text = 'Prenoms:')
edt1 = Entry (fen1, bg = 'green')




Ici, edt1 est créée comme une variable locale à la
fonction new1. Cette
variable disparaîtra dès que la fonction new1 sera
terminée.

edt2 = Entry (fen1, bg = 'green')
edt3 = Entry (fen1, bg = 'green')
Button0 = Button (fen1, text = 'OK', command = save)

tex1.grid(row =0, column =0, sticky = W)
tex2.grid(row =1, column =0, sticky = W)
tex3.grid(row =2, column =0, sticky = W)
edt1.grid(row =0, column =1)
edt2.grid(row =1, column =1)
edt3.grid(row =2, column =1)
Button0.grid(row =3, column =1)

def save():

id = edt1.get()




Ici, la méthode get est appelée sur edt1 qui n'existe plus, ni en
local,
ni en global. Donc erreur:
NameError: global name 'edt1' is not defined

Le problème sera le même avec toutes les variables
initialisées dans
new1 et utilisées dans saveŠ

nom = edt2.get()
prenom = edt3.get()
myquery = "INSERT INTO essai.personne (id, nom, prenom) VALUES
('"+id+"','"+nom+"','"+prenom+"')"
db = MySQLdb.connect(host='localhost', user='root', passwd='', db='essai')
curs = db.cursor()
curs.execute(myquery)
curs.close()
db.commit()



[snip]

La solution est simple: déclarer dans new1 que les variables
utilisées
ailleurs sont globales, et pas locales à la fonction. Cela se fait
simplement en faisant:

def new1():
global edt1, edt2, edt3
fen1=Toplevel()
(etcŠ même code qu'avant)

HTH
- Eric -


Bien Merci ça marche.

Mais si vous permettez encore autre chose, je voudrais maintenant afficher les données de ma base sur mon interface graphique un peu comme le DbGrid de DELPHI. Est-ce avec le widget Listbox? comment faire?
Publicité
Poster une réponse
Anonyme