Trouver une ressource (Nouvelle version du moteur, plus rapide & pertinent, essayez le !)
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
TABLEAU AVEC WXPYTHON (WXGRID)
Information sur la source
Description
Ce programme permet de créé un tableau comme sous Excel, d'insérer autant de colonne et de lignes qu'il veut, puis sauvegarder et restituer son document. Il a été conçu avec WxPython. Si vous avez des remarques à faire, des idées pour l'améliorer, ça cera avec grand plaisir que je vous répondrai.
Source
- import wx
- import wx.grid as gridlib
- import wx.lib.mixins.grid as mixins
- import os
-
- class Grid(gridlib.Grid):
- def __init__(self, parent,li1,li2,sav):
- gridlib.Grid.__init__(self, parent, -1,size=(800,300))
-
- self.moveTo = None
-
- self.po=[]
- self.va=[]
-
- lig=len(li2)
- col=len(li1)
- self.CreateGrid(lig, col)
-
- i=0
- while i<col:
- self.SetColLabelValue(i, li1[i])
- i=i+1
-
- i=0
- while i<lig:
- self.SetRowLabelValue(i, li2[i])
- i=i+1
-
- self.SetColLabelAlignment(wx.ALIGN_LEFT, wx.ALIGN_BOTTOM)
- self.Bind(gridlib.EVT_GRID_CELL_CHANGE, self.test)
- if sav=='':
- self.lis=''
- else:
- exec(sav)
- self.lis=sav
-
- def test(self,evt):
- global listderem
- value = self.GetCellValue(evt.GetRow(), evt.GetCol())
- a=u'\nself.SetCellValue('+str(evt.GetRow())+u','+str(evt.GetCol())+ u',"'+str(value)+u'")'
- self.lis=self.lis+a
- listderem=self.lis
-
-
-
-
-
- class Fentre_prin(wx.Frame):
- def __init__(self, parent, title,li1,li2,par,sav):
- wx.Frame.__init__(self, parent, -1, title,size=(500,500))
- par.Destroy()
-
- menuBar = wx.MenuBar()
-
-
- menu = wx.Menu()
-
- self.li1=li1
- self.li2=li2
-
-
- menu.Append(1,u"Quitter\tF4", u"Quitter le programme")
- menu.AppendSeparator()
- menu.Append(2,u"Sauvegarder", u"Sauvegarder les données")
-
- aide = wx.Menu()
- aide.Append(3,u"À propos de ...\tF1", u"Information sur le programme")
-
- self.Bind(wx.EVT_MENU, self.quitter, id=1)
- self.Bind(wx.EVT_MENU, self.test, id=2)
- self.Bind(wx.EVT_MENU, self.ab, id=3)
-
- menuBar.Append(menu, u"Fichier")
- menuBar.Append(aide, u"Aide")
- self.SetMenuBar(menuBar)
-
- self.CreateStatusBar()
-
-
- panel= wx.Panel(self)
-
- text = wx.StaticText(panel, -1, u"Ceci un tableau créé avec WxPython et le module Grid")
- text.SetSize(text.GetBestSize())
- b1 = wx.Button(panel, -1, u"Quitter")
- b2 = wx.Button(panel, -1, u"Sauvegarder")
- a=Grid(panel,li1,li2,sav)
-
-
- self.Bind(wx.EVT_BUTTON, self.quitter, b1)
- self.Bind(wx.EVT_BUTTON, self.test, b2)
-
- sizer = wx.BoxSizer(wx.VERTICAL)
- sizer.Add(text, 0, wx.ALL, 10)
- sizer.Add(b1, 0, wx.ALL, 10)
- sizer.Add(b2, 0, wx.ALL, 10)
- sizer.Add(a, 0, wx.ALL, 10)
- panel.SetSizer(sizer)
- panel.Layout()
-
-
-
-
-
- def quitter(self, evt):
- self.Close()
- def test(self, evt):
- global listderem
- dlg = wx.FileDialog(
- self, message=u"Exporter les données dans un fichier", defaultDir=os.getcwd(),
- defaultFile="", wildcard=u"Fichier de sauvegarde du tableau (.savt)|*.savt|Tout les fichiers|*.*", style=wx.SAVE)
-
- if dlg.ShowModal() == wx.ID_OK:
- fichier = dlg.GetPath()
- f=open(fichier,'w')
- l1=str(self.li1)+'\n'
- l2=str(self.li2)+'\n'
- f.write('Tableau v1\n'.encode("windows-1252"))
- f.write(l1.encode("windows-1252"))
- f.write(l2.encode("windows-1252"))
- f.write(listderem.encode("windows-1252"))
- f.close()
-
- def ab(self, evt):
- dlg = wx.MessageDialog(self, u"Créé par Aéra group pour CodeS-SourceS.Version 1.0.1\nDéposer sur http://www.pythonfrance.com/",
- u'À propos de ...',
- wx.OK | wx.ICON_INFORMATION
- )
- dlg.ShowModal()
- dlg.Destroy()
-
-
- ###############################################
-
- class Frame(wx.Frame):
- def __init__(self, parent, title,li,no,nos,par,x,y):
- wx.Frame.__init__(self, parent, -1, title,
- pos=(x, y), size=(350, 450),style=wx.DEFAULT_DIALOG_STYLE)
- self.li=li
- self.no=no
- self.nos=nos
- par.Destroy()
-
-
-
-
-
-
- panel = wx.Panel(self)
-
-
- btn = wx.Button(panel, -1, u"Quitter")
- self.b = wx.Button(panel, -1, u"Suivant")
- self.b.Enable(False)
- text1 = wx.StaticText(panel, -1, u"Nom de la "+self.no)
- self.entree_1= wx.TextCtrl(panel, -1, u"", size=(200,-1))
- self.entree_1.SetFocus()
- btn1 = wx.Button(panel, -1, u"Ajouter")
- btn1.SetDefault()
- btn2 = wx.Button(panel, -1, u"Suprimer")
- self.List = []
-
- text2 = wx.StaticText(panel, -1, u"Liste des "+self.nos)
- self.lb1 = wx.ListBox(panel, 60, (100, 50), (90, 120), self.List, wx.LB_SINGLE)
- line = wx.StaticLine(panel, -1, size=(20,-1), style=wx.LI_HORIZONTAL)
-
- self.Bind(wx.EVT_BUTTON, self.quitter, btn)
- self.Bind(wx.EVT_BUTTON, self.aj, btn1)
- self.Bind(wx.EVT_BUTTON, self.su, btn2)
- self.Bind(wx.EVT_BUTTON, self.si, self.b)
- self.Bind(wx.EVT_LISTBOX, self.evte, self.lb1)
- self.Bind(wx.EVT_MOVE, self.Move)
-
-
-
- sizer = wx.BoxSizer(wx.VERTICAL)
- boit1 = wx.BoxSizer(wx.HORIZONTAL)
- boit1.Add(text1, 0, wx.ALL, 10)
- boit1.Add(self.entree_1, 0, wx.ALL, 10)
- sizer.Add(boit1, 0, wx.ALL, 10)
- sizer.Add(btn1, 0, wx.ALL, 10)
- sizer.Add(btn2, 0, wx.ALL, 10)
- boit2 = wx.BoxSizer(wx.HORIZONTAL)
- boit2.Add(text2, 0, wx.ALL, 10)
- boit2.Add(self.lb1, 0, wx.ALL, 10)
- sizer.Add(boit2, 0, wx.ALL, 10)
- sizer.Add(line, 0, wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.RIGHT|wx.TOP, 5)
- boit3 = wx.BoxSizer(wx.HORIZONTAL)
- boit3.Add(btn, 0, wx.ALL, 10)
- boit3.Add(self.b, 0, wx.ALL, 10)
- sizer.Add(boit3, 0, wx.ALL|wx.CENTER, 10)
- panel.SetSizer(sizer)
- panel.Layout()
-
-
- def quitter(self, evt):
- self.Close()
-
- def aj(self,evt):
- if self.entree_1.GetValue()=='':
- wx.Bell()
- elif self.entree_1.GetValue() in self.List:
- dlg = wx.MessageDialog(self, u"Vous avez déja rentrer ce nom",
- u'Information',
- wx.OK | wx.ICON_INFORMATION
- )
- dlg.ShowModal()
- dlg.Destroy()
- self.entree_1.Clear()
- else:
- a=self.entree_1.GetValue()
- self.lb1.Append(a)
- self.entree_1.Clear()
- self.b.Enable(True)
- self.List.append(a)
- self.entree_1.SetFocus()
-
- def su(self,evt):
- try:
- self.lb1.Delete(self.lb1.GetSelection())
- self.List.remove(self.sel)
- self.te()
- except:
- dlg = wx.MessageDialog(self, u"Vous n'avez pas sélectionné de "+ self.no,
- u'Information',
- wx.OK | wx.ICON_INFORMATION
- )
- dlg.ShowModal()
- dlg.Destroy()
-
- def te(self):
- if len(self.List)==0:
- self.b.Enable(False)
-
- def evte(self, event):
- self.sel=event.GetString()
-
- def si(self,evt):
- if self.li==[]:
- frame = Frame(None, u"Étape 2 : Établir la liste des lignes",self.List,u'ligne',u'lignes',self,self.pos.x,self.pos.y)
- frame.Show(True)
- return True
- else :
- frame = Fentre_prin(None, u"Tableau",self.li,self.List,self,'')
- frame.Show(True)
- return True
- def Move(self, event):
- self.pos = event.GetPosition()
-
- class debu(wx.Frame):
- def __init__(self, parent, title):
- wx.Frame.__init__(self, parent, -1, title,
- pos=(150, 150), size=(100, 200),style=wx.DEFAULT_DIALOG_STYLE)
-
- panel = wx.Panel(self)
-
- btn = wx.Button(panel, -1, u"Quitter")
- btn1 = wx.Button(panel, -1, u"Nouveau")
- btn2 = wx.Button(panel, -1, u"Ouvrir")
-
-
- self.Bind(wx.EVT_BUTTON, self.quitter, btn)
- self.Bind(wx.EVT_BUTTON, self.a, btn1)
- self.Bind(wx.EVT_BUTTON, self.b, btn2)
-
-
-
-
- sizer = wx.BoxSizer(wx.VERTICAL)
- sizer.Add(btn, 0, wx.ALL, 10)
- sizer.Add(btn1, 0, wx.ALL, 10)
- sizer.Add(btn2, 0, wx.ALL, 10)
- panel.SetSizer(sizer)
- panel.Layout()
-
-
- def quitter(self, evt):
- self.Close()
-
- def a(self,evt):
- frame = Frame(None, u"Étape 1 : Établir la liste des colonnes",[],u'colonne',u'colonnes',self,160, 150)
- frame.Show(True)
- return True
-
- def b(self,evt):
- dlg = wx.FileDialog(
- self, message=u"Importer un fichier", defaultDir=os.getcwd(),
- defaultFile="", wildcard=u"Fichier de sauvegarde du tableau (.savt)|*.savt|Tout les fichiers|*.*", style=wx.OPEN)
-
- if dlg.ShowModal() == wx.ID_OK:
- fichier = dlg.GetPaths()
- fichier=fichier[0]
- try:
- f=open(fichier,'r')
-
- except:
- d = wx.MessageDialog(self, u"Une erreure est survenu. Imposible d'ouvrir le fichier choisi.",
- u'Information',
- wx.OK | wx.ICON_INFORMATION
- )
- d.ShowModal()
- d.Destroy()
- a0=f.readline()
-
- if a0!='Tableau v1\n':
- da = wx.MessageDialog(self, u"Ce n'est pas un fichier de sauvegarde tableau ...",
- u'Information',
- wx.OK | wx.ICON_INFORMATION
- )
- da.ShowModal()
- da.Destroy()
- else:
- try:
- a=eval(f.readline())
- b=eval(f.readline())
- c=f.read()
- f.close()
- frame = Fentre_prin(None, u"Tableau",a,b,self,c)
- frame.Show(True)
- return True
- except:
- dal = wx.MessageDialog(self, u"Une erreur non identifiée est survenu",
- u'Information',
- wx.OK | wx.ICON_INFORMATION
- )
- dal.ShowModal()
- dal.Destroy()
-
-
-
-
-
- class MyApp(wx.App):
- def OnInit(self):
- frame = debu(None, u"Début")
- self.SetTopWindow(frame)
- frame.Show(True)
- return True
-
- app = MyApp(True)
- app.MainLoop()
import wx
import wx.grid as gridlib
import wx.lib.mixins.grid as mixins
import os
class Grid(gridlib.Grid):
def __init__(self, parent,li1,li2,sav):
gridlib.Grid.__init__(self, parent, -1,size=(800,300))
self.moveTo = None
self.po=[]
self.va=[]
lig=len(li2)
col=len(li1)
self.CreateGrid(lig, col)
i=0
while i<col:
self.SetColLabelValue(i, li1[i])
i=i+1
i=0
while i<lig:
self.SetRowLabelValue(i, li2[i])
i=i+1
self.SetColLabelAlignment(wx.ALIGN_LEFT, wx.ALIGN_BOTTOM)
self.Bind(gridlib.EVT_GRID_CELL_CHANGE, self.test)
if sav=='':
self.lis=''
else:
exec(sav)
self.lis=sav
def test(self,evt):
global listderem
value = self.GetCellValue(evt.GetRow(), evt.GetCol())
a=u'\nself.SetCellValue('+str(evt.GetRow())+u','+str(evt.GetCol())+ u',"'+str(value)+u'")'
self.lis=self.lis+a
listderem=self.lis
class Fentre_prin(wx.Frame):
def __init__(self, parent, title,li1,li2,par,sav):
wx.Frame.__init__(self, parent, -1, title,size=(500,500))
par.Destroy()
menuBar = wx.MenuBar()
menu = wx.Menu()
self.li1=li1
self.li2=li2
menu.Append(1,u"Quitter\tF4", u"Quitter le programme")
menu.AppendSeparator()
menu.Append(2,u"Sauvegarder", u"Sauvegarder les données")
aide = wx.Menu()
aide.Append(3,u"À propos de ...\tF1", u"Information sur le programme")
self.Bind(wx.EVT_MENU, self.quitter, id=1)
self.Bind(wx.EVT_MENU, self.test, id=2)
self.Bind(wx.EVT_MENU, self.ab, id=3)
menuBar.Append(menu, u"Fichier")
menuBar.Append(aide, u"Aide")
self.SetMenuBar(menuBar)
self.CreateStatusBar()
panel= wx.Panel(self)
text = wx.StaticText(panel, -1, u"Ceci un tableau créé avec WxPython et le module Grid")
text.SetSize(text.GetBestSize())
b1 = wx.Button(panel, -1, u"Quitter")
b2 = wx.Button(panel, -1, u"Sauvegarder")
a=Grid(panel,li1,li2,sav)
self.Bind(wx.EVT_BUTTON, self.quitter, b1)
self.Bind(wx.EVT_BUTTON, self.test, b2)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(text, 0, wx.ALL, 10)
sizer.Add(b1, 0, wx.ALL, 10)
sizer.Add(b2, 0, wx.ALL, 10)
sizer.Add(a, 0, wx.ALL, 10)
panel.SetSizer(sizer)
panel.Layout()
def quitter(self, evt):
self.Close()
def test(self, evt):
global listderem
dlg = wx.FileDialog(
self, message=u"Exporter les données dans un fichier", defaultDir=os.getcwd(),
defaultFile="", wildcard=u"Fichier de sauvegarde du tableau (.savt)|*.savt|Tout les fichiers|*.*", style=wx.SAVE)
if dlg.ShowModal() == wx.ID_OK:
fichier = dlg.GetPath()
f=open(fichier,'w')
l1=str(self.li1)+'\n'
l2=str(self.li2)+'\n'
f.write('Tableau v1\n'.encode("windows-1252"))
f.write(l1.encode("windows-1252"))
f.write(l2.encode("windows-1252"))
f.write(listderem.encode("windows-1252"))
f.close()
def ab(self, evt):
dlg = wx.MessageDialog(self, u"Créé par Aéra group pour CodeS-SourceS.Version 1.0.1\nDéposer sur http://www.pythonfrance.com/",
u'À propos de ...',
wx.OK | wx.ICON_INFORMATION
)
dlg.ShowModal()
dlg.Destroy()
###############################################
class Frame(wx.Frame):
def __init__(self, parent, title,li,no,nos,par,x,y):
wx.Frame.__init__(self, parent, -1, title,
pos=(x, y), size=(350, 450),style=wx.DEFAULT_DIALOG_STYLE)
self.li=li
self.no=no
self.nos=nos
par.Destroy()
panel = wx.Panel(self)
btn = wx.Button(panel, -1, u"Quitter")
self.b = wx.Button(panel, -1, u"Suivant")
self.b.Enable(False)
text1 = wx.StaticText(panel, -1, u"Nom de la "+self.no)
self.entree_1= wx.TextCtrl(panel, -1, u"", size=(200,-1))
self.entree_1.SetFocus()
btn1 = wx.Button(panel, -1, u"Ajouter")
btn1.SetDefault()
btn2 = wx.Button(panel, -1, u"Suprimer")
self.List = []
text2 = wx.StaticText(panel, -1, u"Liste des "+self.nos)
self.lb1 = wx.ListBox(panel, 60, (100, 50), (90, 120), self.List, wx.LB_SINGLE)
line = wx.StaticLine(panel, -1, size=(20,-1), style=wx.LI_HORIZONTAL)
self.Bind(wx.EVT_BUTTON, self.quitter, btn)
self.Bind(wx.EVT_BUTTON, self.aj, btn1)
self.Bind(wx.EVT_BUTTON, self.su, btn2)
self.Bind(wx.EVT_BUTTON, self.si, self.b)
self.Bind(wx.EVT_LISTBOX, self.evte, self.lb1)
self.Bind(wx.EVT_MOVE, self.Move)
sizer = wx.BoxSizer(wx.VERTICAL)
boit1 = wx.BoxSizer(wx.HORIZONTAL)
boit1.Add(text1, 0, wx.ALL, 10)
boit1.Add(self.entree_1, 0, wx.ALL, 10)
sizer.Add(boit1, 0, wx.ALL, 10)
sizer.Add(btn1, 0, wx.ALL, 10)
sizer.Add(btn2, 0, wx.ALL, 10)
boit2 = wx.BoxSizer(wx.HORIZONTAL)
boit2.Add(text2, 0, wx.ALL, 10)
boit2.Add(self.lb1, 0, wx.ALL, 10)
sizer.Add(boit2, 0, wx.ALL, 10)
sizer.Add(line, 0, wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.RIGHT|wx.TOP, 5)
boit3 = wx.BoxSizer(wx.HORIZONTAL)
boit3.Add(btn, 0, wx.ALL, 10)
boit3.Add(self.b, 0, wx.ALL, 10)
sizer.Add(boit3, 0, wx.ALL|wx.CENTER, 10)
panel.SetSizer(sizer)
panel.Layout()
def quitter(self, evt):
self.Close()
def aj(self,evt):
if self.entree_1.GetValue()=='':
wx.Bell()
elif self.entree_1.GetValue() in self.List:
dlg = wx.MessageDialog(self, u"Vous avez déja rentrer ce nom",
u'Information',
wx.OK | wx.ICON_INFORMATION
)
dlg.ShowModal()
dlg.Destroy()
self.entree_1.Clear()
else:
a=self.entree_1.GetValue()
self.lb1.Append(a)
self.entree_1.Clear()
self.b.Enable(True)
self.List.append(a)
self.entree_1.SetFocus()
def su(self,evt):
try:
self.lb1.Delete(self.lb1.GetSelection())
self.List.remove(self.sel)
self.te()
except:
dlg = wx.MessageDialog(self, u"Vous n'avez pas sélectionné de "+ self.no,
u'Information',
wx.OK | wx.ICON_INFORMATION
)
dlg.ShowModal()
dlg.Destroy()
def te(self):
if len(self.List)==0:
self.b.Enable(False)
def evte(self, event):
self.sel=event.GetString()
def si(self,evt):
if self.li==[]:
frame = Frame(None, u"Étape 2 : Établir la liste des lignes",self.List,u'ligne',u'lignes',self,self.pos.x,self.pos.y)
frame.Show(True)
return True
else :
frame = Fentre_prin(None, u"Tableau",self.li,self.List,self,'')
frame.Show(True)
return True
def Move(self, event):
self.pos = event.GetPosition()
class debu(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, -1, title,
pos=(150, 150), size=(100, 200),style=wx.DEFAULT_DIALOG_STYLE)
panel = wx.Panel(self)
btn = wx.Button(panel, -1, u"Quitter")
btn1 = wx.Button(panel, -1, u"Nouveau")
btn2 = wx.Button(panel, -1, u"Ouvrir")
self.Bind(wx.EVT_BUTTON, self.quitter, btn)
self.Bind(wx.EVT_BUTTON, self.a, btn1)
self.Bind(wx.EVT_BUTTON, self.b, btn2)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(btn, 0, wx.ALL, 10)
sizer.Add(btn1, 0, wx.ALL, 10)
sizer.Add(btn2, 0, wx.ALL, 10)
panel.SetSizer(sizer)
panel.Layout()
def quitter(self, evt):
self.Close()
def a(self,evt):
frame = Frame(None, u"Étape 1 : Établir la liste des colonnes",[],u'colonne',u'colonnes',self,160, 150)
frame.Show(True)
return True
def b(self,evt):
dlg = wx.FileDialog(
self, message=u"Importer un fichier", defaultDir=os.getcwd(),
defaultFile="", wildcard=u"Fichier de sauvegarde du tableau (.savt)|*.savt|Tout les fichiers|*.*", style=wx.OPEN)
if dlg.ShowModal() == wx.ID_OK:
fichier = dlg.GetPaths()
fichier=fichier[0]
try:
f=open(fichier,'r')
except:
d = wx.MessageDialog(self, u"Une erreure est survenu. Imposible d'ouvrir le fichier choisi.",
u'Information',
wx.OK | wx.ICON_INFORMATION
)
d.ShowModal()
d.Destroy()
a0=f.readline()
if a0!='Tableau v1\n':
da = wx.MessageDialog(self, u"Ce n'est pas un fichier de sauvegarde tableau ...",
u'Information',
wx.OK | wx.ICON_INFORMATION
)
da.ShowModal()
da.Destroy()
else:
try:
a=eval(f.readline())
b=eval(f.readline())
c=f.read()
f.close()
frame = Fentre_prin(None, u"Tableau",a,b,self,c)
frame.Show(True)
return True
except:
dal = wx.MessageDialog(self, u"Une erreur non identifiée est survenu",
u'Information',
wx.OK | wx.ICON_INFORMATION
)
dal.ShowModal()
dal.Destroy()
class MyApp(wx.App):
def OnInit(self):
frame = debu(None, u"Début")
self.SetTopWindow(frame)
frame.Show(True)
return True
app = MyApp(True)
app.MainLoop()
Conclusion
POUR CEUX QUI DÉSIR TÉLÉCHARGER WX.PYTHON :
Allez sur le site http://www.wxpython.org/download.php et sélectionner la version correspondant à votre version de Python et à votre système d'exploitation.
Sources de la même categorie
Commentaires
Discussions en rapport avec ce code source
|
CalendriCode
| | | L | M | M | J | V | S | D |
| | 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 | | | |
|
Téléchargements
Logiciels à télécharger sur le même thème :
|