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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
|
#!/usr/bin/python
# -*- coding: iso-8859-1 -*-
# formulaire de saisie et boite de controle dialogue
# niveau DEBUTANT, langages et versions :
# WINDOWS PYTHON2.7 module WX (widget compatible revue ecran non-voyants
# je ne trouve pas les commandes pour modifier un item de la boite de controle
# et de placer les elements item dans les champs de saisie
import wx
from wx.lib.mixins.listctrl import ListCtrlAutoWidthMixin
class DialogControle(wx.Dialog):
"""Creation formulaire avec report dans boite controle passage listre titre de champs"""
def __init__(self, parent, id, title,ListeCh):
"""Constructeur du formulaire"""
wx.Dialog.__init__(self, parent, id, title, size=(1200,800), style=wx.DEFAULT_DIALOG_STYLE)
# initialisation liste des champs du formulaire
self.LiCh = ListeCh
NbrL = len(self.LiCh)
hbox = wx.BoxSizer(wx.HORIZONTAL)
vbox1 = wx.BoxSizer(wx.VERTICAL)
vbox2 = wx.BoxSizer(wx.VERTICAL) # liste de champs de controle
vbox3 = wx.GridSizer(NbrL,2,0,0) # tableau 2 colonnes champs avec demande saisie
vbox4 = wx.BoxSizer(wx.VERTICAL)
# box4 boutons ajouter supprimer effacer tout, modifier
# valider les enregistrements de la boite de controle
# deux objet de panneau
pnl1 = wx.Panel(self, -1, style=wx.SIMPLE_BORDER)
pnl2 = wx.Panel(self, -1, style=wx.SIMPLE_BORDER)
# instance pour liste de controle avec insertion colonne de champs
self.lc = wx.ListCtrl(self, -1, style=wx.LC_REPORT)
for c in range(NbrL):
self.lc.InsertColumn(c, self.LiCh[c])
self.lc.SetColumnWidth(c, 140)
#self.lc.SetColumnWidth(1, 250)
# ajout dans les panneaux pnl dans boite de dialogue box1
vbox1.Add(pnl1, 1, wx.EXPAND | wx.ALL, 3)
vbox1.Add(pnl2, 1, wx.EXPAND | wx.ALL, 3)
# ajout lc dans boite de controle dans box2
vbox2.Add(self.lc, 1, wx.EXPAND | wx.ALL, 3)
self.tc = {} # dictionnaire de champs de formulaire
# construction ligne de label du dictionnaire champs pour formulaire
c = 0
for c in range(NbrL):
self.tc[self.LiCh[c]] = wx.TextCtrl(pnl1, -1)
# creation liste pour placer les elements de formulaire
# ajout des elements dans tableau de 2 colonnes formulaire (titre champs plus enregistrement a saisir)
c = 0
self.formu = []
for c in range(NbrL):
self.formu.append((wx.StaticText(pnl1, -1, self.LiCh[c]),0, wx.ALIGN_CENTER,))
self.formu.append((self.tc[self.LiCh[c]], 0, wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL,))
# modification de box3 saisie
vbox3.AddMany(self.formu)
pnl1.SetSizer(vbox3)
# ajout des bouton et modification de pnl2
vbox4.Add(wx.Button(pnl2, 10, '&Ajouter'), 0, wx.ALIGN_CENTER| wx.TOP, 45)
vbox4.Add(wx.Button(pnl2, 11, '&Supprimer'), 0, wx.ALIGN_CENTER|wx.TOP, 15)
vbox4.Add(wx.Button(pnl2, 12, 'Effacer tout'), 0, wx.ALIGN_CENTER| wx.TOP, 15)
vbox4.Add(wx.Button(pnl2, 15, '&Modifier'), 0, wx.ALIGN_CENTER| wx.TOP, 15)
vbox4.Add(wx.Button(pnl2, 20, '&Valider'), 0, wx.ALIGN_CENTER| wx.TOP, 15)
pnl2.SetSizer(vbox4)
# evenement envois des evements des boutons vers fonctions methode
self.Bind (wx.EVT_BUTTON, self.AjouterF, id=10)
self.Bind (wx.EVT_BUTTON, self.SupprimerF, id=11)
self.Bind (wx.EVT_BUTTON, self.ToutEffacerF, id=12)
self.Bind (wx.EVT_BUTTON, self.ModifierF, id=15)
self.Bind (wx.EVT_BUTTON, self.ValiderF, id=20)
hbox.Add(vbox1, 1, wx.EXPAND)
hbox.Add(vbox2, 1, wx.EXPAND)
self.SetSizer(hbox)
def MInfo(self, MessageB,TitreB):
dlg = wx.MessageDialog(self,TitreB,MessageB, wx.OK|wx.ICON_INFORMATION)
dlg.ShowModal()
dlg.Destroy()
def AjouterF(self, event):
"""ajout dans la liste controle des valeurs du formulaire saisies"""
if not self.tc['Nom'].GetValue() or not self.tc[self.LiCh[1]].GetValue():
self.MInfo("Attention", "Saisie nom et prenom obligatoire")
return
num_items = self.lc.GetItemCount()
#self.MInfo("Attention", str(num_items))
self.lc.InsertStringItem(num_items, self.tc[self.LiCh[0]].GetValue())
i = 0
for i in range(len(self.LiCh)):
if i > 0:
self.lc.SetStringItem(num_items, i, self.tc[self.LiCh[i]].GetValue())
# effacement des valeurs du formulaire
i = 0
for i in range(len(self.LiCh)):
self.tc[self.LiCh[i]].Clear()
def SupprimerF(self, event):
"""supprimer un enregistrement de liste de controle"""
index = self.lc.GetFocusedItem()
self.MInfo("Attention", str(index))
self.lc.DeleteItem(index)
def ModifierF(self, event):
index = self.lc.GetFocusedItem()
#sel = self.lc.GetSelection()
#text = self.lc.GetString(index)
#self.MInfo("Attention", text)
#Wx.TextEditMixin
#self.essai = self.lc.GetStringItem(index)
#self.aa = self.lc.GetItemText(index)
self.essai = self.lc.GetItemText(index)
#self.aa = self.lc.GetStringItem(index)
self.MInfo("Attention", self.essai+ "Erreur manque prenom et adresse, votre aide merci")
def ValiderF(self, event):
"""valider le formulaire"""
frame = MInfo(None, -1, 'aqestion')
frame.ShowModal()
#frame.Destroy()
#frame = MessageInfo(None, -1, 'bqestion')
#frame.Show(True)
#fr = frame.GetValue()
#frame = MessageInfo(None, -1, 'arecupera')
#frame.Show(True)
#frame.Destroy()
self.Close()
def ToutEffacerF(self, event):
"""Effacer toute les enregistrements de la liste de controle"""
self.lc.DeleteAllItems()
def setListeCh(self, LiCh):
self.LiChamps = LiCh
class MyApp(wx.App):
def OnInit(self):
# passage de liste de label de champs pour contruire fiche formulaire de saisie
LiCh = ['Nom', 'Prenom', 'adresse']
dia = DialogControle(None, -1, 'Formulaire saisie',LiCh)
dia.ShowModal()
dia.Destroy()
return True
app = MyApp(0)
app.MainLoop() |
Partager