Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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