Pages : 1
Discussion fermée
#1 Le 23/06/2008, à 21:45
- dayiri
wx threading et sockets
salut,
je suis en pleine conception d'une application pythonnienne servant à fournir à un client émentant une requète la liste des maison en location ou en vente d'une commune donnée par le client
voici le protocole:
1 - le client compose un code par exemple #133#
2 - il reçoit un message du serveur lui demandant de taper "1" pour les logements en vente ou "2" pour les logements en location
3 - en fonction du choix effectué (1 ou 2), le programme exécute une première requète sur la base de données pour extraire la liste des logements concernés par le choix (1 pour les ventes ou 2 pour les locations(le résultat de cette requette est inséré dans un tuple
4 - le client reçoit un 2ème message lui demandant de préciser la commune dans laquelle il désirerait avoir la liste des logements
5 - après précision du nom de cette commune, le programme parcours le tuple et ressort tous les éléments dont les critère correspondent au nom de la commune entrée par le client.
6 - le client reçoit le résultat final de la requète sur une interface cliente
j'ai pu concevoir la parti serveur sans la partie communication (Socket, thread)
je n'ai pas encore conçu la partie cliente
je désirerais vraiment de l'aide pour profiner tout cela
- code la partie communication(socket et thread de la partie serveur avec un nombre quelconque de clients)
- coder la partie cliente pour quelle puisse emmettre des requêtes vers le serveur
merci
voici le code source de la console qui fera office de serveur:
###########################################################"
# premier écran
import wx
import MySQLdb, sys , pprint
import SocketServer, socket, threading
from wx.lib.mixins.listctrl import ColumnSorterMixin , CheckListCtrlMixin, ListCtrlAutoWidthMixin
class DatabaseConnectDialog(wx.Dialog):
def __init__(self, parent, id, title):
wx.Dialog.__init__(self, parent, id, title)
self.boxvertical = wx.BoxSizer(wx.VERTICAL)
boxhorizontal = wx.BoxSizer(wx.HORIZONTAL)
statictext = wx.StaticText(self, -1, "PARAMETRAGE DU SERVEUR")
font = wx.Font(12, wx.DEFAULT, wx.NORMAL, wx.NORMAL)
statictext.SetFont(font)
statictext.SetSize(statictext.GetBestSize())
boxhorizontal.Add(statictext, 0, wx.ALIGN_CENTER|wx.ALL, 5)
self.boxvertical.Add(boxhorizontal, 0, wx.ALIGN_CENTER | wx.ALL, 5)
gridsizer = wx.GridSizer(3, 2, 5, 5)
statictexthost = wx.StaticText(self, -1, "HoZst")
self.textctrlhost = wx.TextCtrl(self, -1, value="localhoZst")
statictextport = wx.StaticText(self, -1, "Port")
#self.textctrlusername = wx.TextCtrl(self, -1)
self.textctrlport = wx.TextCtrl(self, -1, value='330Z6')
self.textctrlport.SetFocus()
gridsizer.AddMany([
(statictexthost, 0, wx.EXPAND),
(self.textctrlhost, 0, wx.EXPAND),
(statictextport, 0, wx.EXPAND),
(self.textctrlport, 0, wx.EXPAND),
])
self.boxvertical.Add(gridsizer, 0, wx.ALIGN_CENTER | wx.ALL, 5)
boxhorizontal = wx.BoxSizer(wx.HORIZONTAL)
self.boxvertical.Add(boxhorizontal, 0, wx.ALIGN_LEFT | wx.ALL, 5)
self.gridsizerport = wx.GridSizer(1, 2, 5, 5)
statictextport = wx.StaticText(self, -1, "Port")
self.textctrlport = wx.TextCtrl(self, -1)
self.gridsizerport.AddMany([
(statictextport, 0, wx.EXPAND),
(self.textctrlport, 0, wx.EXPAND)
])
self.boxhorizontalport = wx.BoxSizer(wx.HORIZONTAL)
self.boxhorizontalport.Add(self.gridsizerport, 0, wx.ALIGN_CENTER | wx.ALL, 0)
self.boxhorizontalport.Show(self.gridsizerport, 0)
boxhorizontal = wx.BoxSizer(wx.HORIZONTAL)
ok = wx.Button(self, wx.ID_OK, " &OK ")
ok.SetDefault()
boxhorizontal.Add(ok, 0, wx.ALIGN_CENTRE | wx.ALL, 5)
cancel = wx.Button(self, wx.ID_CANCEL, " &Cancel ")
boxhorizontal.Add(cancel, 0, wx.ALIGN_CENTRE | wx.ALL, 5)
self.boxvertical.Add(boxhorizontal, 0, wx.ALIGN_CENTER | wx.ALL, 5)
self.SetSizer(self.boxvertical)
# We need it if we want to change the layout automatically
# see CheckBoxChangePort
self.SetAutoLayout(True)
self.boxvertical.Fit(self)
###########################################################################
class MyMenu(wx.MDIParentFrame):
"classe de création de la fenêtre principale"
def NewForm(self, event):
win = wx.MDIChildFrame(self, -1, "NOUVEAU")
win.Show(True)
dia = wx.MessageDialog(self, 'Voulez-vous générer un nouveau formulaire d\'enregistrement de logement ?', 'Nouveau Logement', wx.YES|wx.NO|wx.ICON_INFORMATION)
result = dia.ShowModal()
if result == wx.ID_YES:
wx.MessageBox("OK", "CHOIX")
else:
a = wx.GetPasswordFromUser("Taper Non", caption = "Input text")
wx.MessageBox(a)
dia.Destroy()
def OpenForm(self, event):
return True
def SaveForm(self, event):
return True
def ViewVentes(self, event):
return True
def ViewLocat(self, event):
return True
def PrintView(self, event):
return True
def PrintAll(self, event):
return True
def Modif(self, event):
return True
def Suppr(self, event):
return True
def Annul(self, event):
return True
def Repet(self, event):
return True
def Aide(self, event):
return True
def Apropos(self, event):
return True
def OnQuit(self, event):
self.Close()
def Connexion(self, event) :
"""
Show the database connect dialog, Alt+D+O or F11
"""
dcd = DatabaseConnectDialog(self, -1, "Connect")
dcd.CenterOnScreen()
dcd.Show()
if dcd.ShowModal() == wx.ID_OK :
_host = dcd.textctrlhost.GetValue()
_Port = dcd.textctrlport.GetValue()
mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
mySocket.bind((_host, _Port))
except socket.error:
wx.MessageBox("La liaison du socket à l'adresse choisie a échoué.", "MSG1")
sys.exit()
wx.MessageBox("Serveur prêt, en attente de requêtes ...", "MSG2")
mySocket.listen(5)
# Attente et prise en charge des connexions demandées par les clients :
conn_client = {} # dictionnaire des connexions clients
while 1:
connexion, adresse = mySocket.accept()
# Créer un nouvel objet thread pour gérer la connexion :
th = ThreadClient(connexion)
th.start()
# Mémoriser la connexion dans le dictionnaire :
it = th.getName() # identifiant du thread
conn_client[it] = connexion
wx.MessageBox("Client %s connecté, adresse IP %s, port %s." %\
(it, adresse[0], adresse[1]), "MSG3")
# Dialogue avec le client :
connexion.send("Vous êtes connecté. Envoyez vos messages.")
dcd.Destroy()
event.Skip()
"fonction d'initialisation"
def __init__(self, parent, id, title):
wx.MDIParentFrame.__init__(self, parent, id, title, wx.Point(150, 30), wx.Size(1000, 700))
self.baseDonn = MySQLdb.connect(db ="logiumdb",
user ="root", passwd ="espion", host ="localhost", port =3306)
self.cursor = self.baseDonn.cursor() # création du curseur
#self.req1 = "CREATE TABLE LOGEMENT (id_lot INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , num_lot VARCHAR( 10 ) NOT NULL , ag_im VARCHAR( 50 ) NOT NULL , ag_tel VARCHAR( 20 ) NOT NULL , ag_cel VARCHAR( 20 ) NOT NULL , ag_mail VARCHAR( 50 ) NOT NULL , ag_bp VARCHAR( 25 ) NOT NULL , log_entite VARCHAR( 15 ) NOT NULL , log_superf INT( 20 ) NOT NULL , log_contr VARCHAR( 15 ) NOT NULL , log_com VARCHAR( 20 ) NOT NULL , log_quart VARCHAR( 20 ) NOT NULL , log_descipt VARCHAR( 150 ) NOT NULL , log_mont VARCHAR( 30 ) NOT NULL)"
#self.req3 = "SELECT * FROM LOGEMENT"
#self.cursor.execute(self.req3)
#self.res = self.cursor.fetchall()
menubar = wx.MenuBar()
fichier=wx.Menu()
edition=wx.Menu()
administration=wx.Menu()
outils=wx.Menu()
aide=wx.Menu()
fichier.Append(101, '&Nouveau', 'Nouveau formulaire d\'enregistrement')
fichier.Append(102, '&Ouvrir', 'Ouvrir le dernier enregistrement')
fichier.Append(103, '&Enregistrer', 'sauvegarder le formulaire courant')
fichier.Append(104, 'Visualiser &ventes', 'Visualiser la liste des logements à vendre')
fichier.Append(105, 'Visualiser &locations', 'Visualiser la liste des logements à mettre en location')
fichier.Append(106, '&Imprimer', 'Imprimer la sélectio courante')
fichier.Append(107, 'Impri&mer tout', 'Imprimer tous les enregistrements')
edition.Append(201, 'Mo&difier', 'Modifier l\'enregistrement courant')
edition.Append(202, '&Supprimer l\'enregistrement courant')
edition.Append(203, 'Ann&uler \ Ctrl + Z', 'Annuler les modifications')
edition.Append(204, '&Repéter \ Ctrl + Y', 'Repéter les modifications annulées')
administration.Append(301, 'Connexion du serveur', 'Connexion du serveur')
outils.Append(801, 'Outils1&', 'Outils 1')
aide.Append(501, 'A&ide \ F1', 'Aide')
aide.Append(502, 'A propos de logium', 'A propos de logium')
fichier.AppendSeparator()
quit = wx.MenuItem(fichier, 108, '&Quitter', 'Quitter le programme')
fichier.AppendItem(quit)
menubar.Append(fichier, '&Fichier')
menubar.Append(edition, '&Edition')
menubar.Append(administration, '&Administration')
menubar.Append(outils, '&Outils')
menubar.Append(aide, '&Aide')
self.SetMenuBar(menubar)
self.CreateStatusBar()
self.Bind(wx.EVT_MENU, self.NewForm, id=101)
self.Bind(wx.EVT_MENU, self.OpenForm, id=102)
self.Bind(wx.EVT_MENU, self.SaveForm, id=103)
self.Bind(wx.EVT_MENU, self.ViewVentes, id=104)
self.Bind(wx.EVT_MENU, self.ViewLocat, id=105)
self.Bind(wx.EVT_MENU, self.PrintView, id=106)
self.Bind(wx.EVT_MENU, self.PrintAll, id=107)
self.Bind(wx.EVT_MENU, self.Modif, id=201)
self.Bind(wx.EVT_MENU, self.Suppr, id=202)
self.Bind(wx.EVT_MENU, self.Annul, id=203)
self.Bind(wx.EVT_MENU, self.Repet, id=204)
self.Bind(wx.EVT_MENU, self.Connexion, id=301)
self.Bind(wx.EVT_MENU, self.Aide, id=501)
self.Bind(wx.EVT_MENU, self.Apropos, id=502)
self.Bind(wx.EVT_MENU, self.OnQuit, id=108)
#Actions liées au click sur bouttons
self.Bind(wx.EVT_BUTTON, self.Ajoute, id = 10)
self.Bind(wx.EVT_BUTTON, self.Modifie, id = 11)
self.Bind(wx.EVT_BUTTON, self.Actualise, id = 12)
self.Bind(wx.EVT_BUTTON, self.Supprime, id = 13)
#Fin des actions des bouttons
#déclaration des actions liées à la liste:
self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected, id =15)
#self.Bind(wx.EVT_LIST_DELETE_ITEM, self.Supprime, id =15)
#Champs de l'identifiant du logement
#C'est la clé primaire de la table logement et elle est générée automatiquement
wx.StaticText(self, -1, "Identifiant", wx.DLG_PNT(self, 15, 5))
self.ident = wx.TextCtrl(self, 120, "", wx.DLG_PNT(self, 80, 5), wx.DLG_SZE(self, 40, 12))
#Le numéro du lot, il est fournit par l'agence immobilière détentrice du lot
wx.StaticText(self, -1, "N° du lot", wx.DLG_PNT(self, 15, 25))
self.numlot = wx.TextCtrl(self, 121, "", wx.DLG_PNT(self, 80, 25), wx.DLG_SZE(self, 50, 12))
#le nom de l'agence immobilière détentrice du logement
wx.StaticText(self, -1, "Agence Immobilière", wx.DLG_PNT(self, 15, 45))
self.agence = wx.TextCtrl(self, 122, "", wx.DLG_PNT(self, 80, 45), wx.DLG_SZE(self, 100, 12))
#Le n° de téléphone de l'agence
wx.StaticText(self, -1, "Tél ", wx.DLG_PNT(self, 15, 65))
self.tel = wx.TextCtrl(self, 123, "", wx.DLG_PNT(self, 80, 65), wx.DLG_SZE(self, 60, 12))
#Le n° de téléphone cellulaire de l'agence
wx.StaticText(self, -1, "Cel ", wx.DLG_PNT(self, 15, 85))
self.cel = wx.TextCtrl(self, 124, "", wx.DLG_PNT(self, 80, 85), wx.DLG_SZE(self, 60, 12))
#L'adresse email de l'agence
wx.StaticText(self, -1, "E-mail ", wx.DLG_PNT(self, 15, 105))
self.mail = wx.TextCtrl(self, 125, "", wx.DLG_PNT(self, 80, 105), wx.DLG_SZE(self, 100, 12))
#L'adresse postale de l'agence
wx.StaticText(self, -1, "Adresse postale ", wx.DLG_PNT(self, 15, 125))
self.bp = wx.TextCtrl(self, 126, "", wx.DLG_PNT(self, 80, 125), wx.DLG_SZE(self, 110, 12))
#Le Type de l'entité: un terrain ou un logement
entite = ['Logement', 'Terrain']
wx.StaticText(self, -1, "Entité ", wx.DLG_PNT(self, 220, 5))
self.entite = wx.ComboBox(self, 127, "", wx.DLG_PNT(self, 285, 5), wx.DLG_SZE(self, 50, 12), entite, wx.CB_DROPDOWN)
#La superficie de l'entité
wx.StaticText(self, -1, "Superficie (m²) ", wx.DLG_PNT(self, 220, 25))
self.superf = wx.TextCtrl(self, 128, "", wx.DLG_PNT(self, 285, 25), wx.DLG_SZE(self, 30, 12))
#Le type de contrat : vente ou location
contrat = ['Vente', 'Location']
wx.StaticText(self, -1, "Contrat ", wx.DLG_PNT(self, 220, 45))
self.contrat = wx.ComboBox(self, 129, "", wx.DLG_PNT(self, 285, 45), wx.DLG_SZE(self, 50, 12), contrat, wx.CB_DROPDOWN)
#La commune où se trouve le logement
wx.StaticText(self, -1, "Commune ", wx.DLG_PNT(self, 220, 65))
self.comm = wx.TextCtrl(self, 130, "", wx.DLG_PNT(self, 285, 65), wx.DLG_SZE(self, 70, 12))
#Le quartier où se trouve le logement
wx.StaticText(self, -1, "Quartier", wx.DLG_PNT(self, 220, 85))
self.quart = wx.TextCtrl(self, 131, "", wx.DLG_PNT(self, 285, 85), wx.DLG_SZE(self, 70, 12))
#La description du logement
wx.StaticText(self, -1, "Description", wx.DLG_PNT(self, 220, 105))
self.descrip = wx.TextCtrl(self, 132, "", wx.DLG_PNT(self, 285, 105), wx.DLG_SZE(self, 200, 30), style = wx.TE_MULTILINE|wx.TE_RICH2)
#Le montant du loyer ou de l'achat
wx.StaticText(self, -1, "Montant", wx.DLG_PNT(self, 220, 140))
self.montant = wx.TextCtrl(self, 133, "", wx.DLG_PNT(self, 285, 140), wx.DLG_SZE(self, 90, 12))
#Boutton d'ajout d'une nouvelle entité
ajouter = wx.Button(self, 10, "&Ajouter", wx.DLG_PNT(self, 100, 160), wx.DLG_SZE(self, 60, 20))
#Boutton d'ajout d'une nouvelle entité
modifier = wx.Button(self, 11, "&Modifier", wx.DLG_PNT(self, 200, 160), wx.DLG_SZE(self, 60, 20))
#Boutton d'actualisation de la liste des enregistrements
actualiser = wx.Button(self, 12, "A&ctualiser", wx.DLG_PNT(self, 300, 160), wx.DLG_SZE(self, 60, 20))
#Boutton de suppression d'un enregistrement
supprimer = wx.Button(self, 13, "&Supprimer", wx.DLG_PNT(self, 400, 160), wx.DLG_SZE(self, 60, 20))
#Evenements liés au bouttons
#EVT_BUTTON(self, 11, self.ajoute)
#EVT_BUTTON(self, 12, self.actualise)
#EVT_BUTTON(self, 13, self.supprime)
#List des enregistrements dans la base de données
self.lc = wx.ListCtrl(self, 15, wx.DLG_PNT(self, 10, 185), wx.DLG_SZE(self, 480, 120), style = wx.LC_REPORT|wx.LC_VRULES|wx.LC_HRULES|wx.SUNKEN_BORDER)
self.lc.currentSel = 0
self.lc.InsertColumn(0, "ID")
self.lc.SetColumnWidth(0, 100)
self.lc.InsertColumn(1, "N° LOT")
self.lc.SetColumnWidth(1, 150)
self.lc.InsertColumn(2, "Agence Immobilière")
self.lc.SetColumnWidth(2, 200)
self.lc.InsertColumn(3, "Téléphone")
self.lc.SetColumnWidth(3, 150)
self.lc.InsertColumn(4, "Cellulaire")
self.lc.SetColumnWidth(4, 150)
self.lc.InsertColumn(5, "E-Mail")
self.lc.SetColumnWidth(5, 200)
self.lc.InsertColumn(6, "Boîte postale")
self.lc.SetColumnWidth(6, 200)
self.lc.InsertColumn(7, "Entité")
self.lc.SetColumnWidth(7, 100)
self.lc.InsertColumn(8, "Superficie")
self.lc.SetColumnWidth(8, 100)
self.lc.InsertColumn(9, "Contrat")
self.lc.SetColumnWidth(9, 100)
self.lc.InsertColumn(10, "Commune")
self.lc.SetColumnWidth(10, 150)
self.lc.InsertColumn(11, "Quartier")
self.lc.SetColumnWidth(11, 150)
self.lc.InsertColumn(12, "Description")
self.lc.SetColumnWidth(12, 500)
self.lc.InsertColumn(13, "Montant")
self.lc.SetColumnWidth(13, 200)
self.SetSize(self.GetSize())
#EVT_LIST_ITEM_SELECTED(self, 15, self.getSelect)
#Déclaration des méthodes liées aux bouttons et aux objets
def setSelect(self, event):
return
def getSelect(self, event):
return
#### début déclaration des méthodes liées à la liste
def Ajoute(self, event):
num_items = self.lc.GetItemCount()
i = 0
self.req3 = "SELECT * FROM LOGEMENT"
self.cursor.execute(self.req3)
self.res = self.cursor.fetchall()
for loge in self.res:
self.lc.InsertStringItem(num_items, '%s' %loge[0])
self.lc.SetStringItem(num_items, 1,'%s' %loge[1])
self.lc.SetStringItem(num_items, 2,'%s' %loge[2])
self.lc.SetStringItem(num_items, 3,'%s' %loge[3])
self.lc.SetStringItem(num_items, 4,'%s' %loge[4])
self.lc.SetStringItem(num_items, 5,'%s' %loge[5])
self.lc.SetStringItem(num_items, 6,'%s' %loge[6])
self.lc.SetStringItem(num_items, 7,'%s' %loge[7])
self.lc.SetStringItem(num_items, 8,'%s' %loge[8])
self.lc.SetStringItem(num_items, 9,'%s' %loge[9])
self.lc.SetStringItem(num_items, 10,'%s' %loge[10])
self.lc.SetStringItem(num_items, 11,'%s' %loge[11])
self.lc.SetStringItem(num_items, 12,'%s' %loge[12])
self.lc.SetStringItem(num_items, 13,'%s' %loge[13])
ident = self.ident.GetValue()
numlot = self.numlot.GetValue()
agence = self.agence.GetValue()
tel = self.tel.GetValue()
cel = self.cel.GetValue()
mail = self.mail.GetValue()
bp = self.bp.GetValue()
entite = self.entite.GetValue()
superf = self.superf.GetValue()
contrat = self.contrat.GetValue()
comm = self.comm.GetValue()
quart = self.quart.GetValue()
descrip = self.descrip.GetValue()
montant = self.montant.GetValue()
ch = [ident, numlot, agence, tel, cel, mail, bp, entite, superf, contrat, comm, quart, descrip, montant]
llist = range(15)
for i in llist:
if ch[i] == '':
wx.MessageBox('Veuillez renseigner tous les champs vides', 'ERROR', wx.OK|wx.ICON_INFORMATION)
else:
req = "insert into LOGEMENT (id_lot, num_lot, ag_im, ag_tel, ag_cel, ag_mail, ag_bp, log_entite, log_superf, log_contr, log_com, log_quart, log_descipt, log_mont) values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')" %( ident, numlot, agence, tel, cel, mail, bp, entite, superf, contrat, comm, quart, descrip, montant)
#req2 = "SELECT * FROM LOGEMENT"
self.cursor.execute(req)
########################################################
self.req3 = "SELECT * FROM LOGEMENT"
self.cursor.execute(self.req3)
self.res = self.cursor.fetchall()
for loge in self.res:
self.lc.InsertStringItem(num_items, '%s' %loge[0])
self.lc.SetStringItem(num_items, 1,'%s' %loge[1])
self.lc.SetStringItem(num_items, 2,'%s' %loge[2])
self.lc.SetStringItem(num_items, 3,'%s' %loge[3])
self.lc.SetStringItem(num_items, 4,'%s' %loge[4])
self.lc.SetStringItem(num_items, 5,'%s' %loge[5])
self.lc.SetStringItem(num_items, 6,'%s' %loge[6])
self.lc.SetStringItem(num_items, 7,'%s' %loge[7])
self.lc.SetStringItem(num_items, 8,'%s' %loge[8])
self.lc.SetStringItem(num_items, 9,'%s' %loge[9])
self.lc.SetStringItem(num_items, 10,'%s' %loge[10])
self.lc.SetStringItem(num_items, 11,'%s' %loge[11])
self.lc.SetStringItem(num_items, 12,'%s' %loge[12])
self.lc.SetStringItem(num_items, 13,'%s' %loge[13])
self.ident.Clear()
self.numlot.Clear()
self.agence.Clear()
self.tel.Clear()
self.cel.Clear()
self.mail.Clear()
self.bp.Clear()
#self.entite.Clear()
self.superf.Clear()
#self.contrat.Clear()
self.comm.Clear()
self.quart.Clear()
self.descrip.Clear()
self.montant.Clear()
self.baseDonn.commit()
def Modifie(self, event):
ident = self.ident.GetValue()
numlot = self.numlot.GetValue()
agence = self.agence.GetValue()
tel = self.tel.GetValue()
cel = self.cel.GetValue()
mail = self.mail.GetValue()
bp = self.bp.GetValue()
entite = self.entite.GetValue()
superf = self.superf.GetValue()
contrat = self.contrat.GetValue()
comm = self.comm.GetValue()
quart = self.quart.GetValue()
descrip = self.descrip.GetValue()
montant = self.montant.GetValue()
req5 = "UPDATE LOGEMENT SET id_lot='%s', num_lot='%s', ag_im='%s', ag_tel='%s', ag_cel='%s', ag_mail='%s', ag_bp='%s', log_entite='%s', log_superf='%s', log_contr='%s', log_com='%s', log_quart='%s', log_descript='%s', log_mont='%s' WHERE CONVERT(id_lot USING utf8)='%s' LIMIT 1" %(ident) %(numlot) %(agence) %(tel) %(cel) %(mail) %(bp) %(entite) %(superf) %(contrat) %(comm) %(quart) %(descrip) %(montant) %(ident)
self.cursor.execute(req5)
wx.MessageBox("MERCI DONNEES MODIFIEES", "F5")
def Actualise(self, event):
num_items = self.lc.GetItemCount()
i = 0
#self.lc.DeleteAllItems()
self.req3 = "SELECT DISTINCT * FROM LOGEMENT"
self.cursor.execute(self.req3)
self.res = self.cursor.fetchall()
for loge in self.res:
self.lc.InsertStringItem(num_items, '%s' %loge[0])
self.lc.SetStringItem(num_items, 1,'%s' %loge[1])
self.lc.SetStringItem(num_items, 2,'%s' %loge[2])
self.lc.SetStringItem(num_items, 3,'%s' %loge[3])
self.lc.SetStringItem(num_items, 4,'%s' %loge[4])
self.lc.SetStringItem(num_items, 5,'%s' %loge[5])
self.lc.SetStringItem(num_items, 6,'%s' %loge[6])
self.lc.SetStringItem(num_items, 7,'%s' %loge[7])
self.lc.SetStringItem(num_items, 8,'%s' %loge[8])
self.lc.SetStringItem(num_items, 9,'%s' %loge[9])
self.lc.SetStringItem(num_items, 10,'%s' %loge[10])
self.lc.SetStringItem(num_items, 11,'%s' %loge[11])
self.lc.SetStringItem(num_items, 12,'%s' %loge[12])
self.lc.SetStringItem(num_items, 13,'%s' %loge[13])
def OnItemSelected(self, event):
item1 = event.GetItem()
val = item1.GetText()
req4 = "SELECT DISTINCT * FROM LOGEMENT WHERE id_lot = '%s'" %(val)
self.cursor.execute(req4)
idselect = self.cursor.fetchall()
for enreg in idselect:
self.ident.SetValue(enreg[0])
self.numlot.SetValue(enreg[1])
self.agence.SetValue(enreg[2])
self.tel.SetValue(enreg[3])
self.cel.SetValue(enreg[4])
self.mail.SetValue(enreg[5])
self.bp.SetValue(enreg[6])
self.entite.SetValue(enreg[7])
self.superf.SetValue(enreg[8])
self.contrat.SetValue(enreg[9])
self.comm.SetValue(enreg[10])
self.quart.SetValue(enreg[11])
self.descrip.SetValue(enreg[12])
self.montant.SetValue(enreg[13])
def Supprime(self, event):
ident = self.ident.GetValue()
req6 = "DELETE FROM LOGEMENT WHERE id_lot ='%s'" %(ident)
self.lc.DeleteItem(long(ident))
wx.MessageBox("L'enregistrement a été supprimé avec succès", "Suppression")
return
####Fin de la déclaration des méthodes liées aux listes
class MyApp(wx.App):
def OnInit(self):
frame = MyMenu(None, -1, 'BIENVENUE SUR LOGIUM')
frame.Show(True)
frame.Centre()
return True
app = MyApp(0)
app.MainLoop()
Hors ligne
#2 Le 23/06/2008, à 22:01
- slasher_fun
Re : wx threading et sockets
Un problème = un topic. 2 c'est trop, alors 4...
Hors ligne
Pages : 1
Discussion fermée