Quand j'aurai de la motivation à nouveau, je relance le combat avec eclipse, mais pour le moment...
C'est pas grand chose, mais pratique pour avoir une vue d'ensemble : j'ai ajouté une entrée dans le menu fichier qui exploite la fonction "latotale", afin de générer une feuille d'exercices par niveau. Voici la modification de la classe Fenetre_Principale dans pyromaths.py. Pour le reste, il faut juste définir la fonction latotale au début et une variable ID_TOTALE = 104 :
Code : Tout sélectionner
class Fenetre_Principale(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, "Pyromaths...")
# Crée l'icone de l'application
if os.name == "posix":
if os.path.basename(__file__) == "pyromaths":
self.icon = wx.Icon("/usr/share/pixmaps/pyromaths.png",
wx.BITMAP_TYPE_PNG)
else:
pathname = os.path.dirname((sys.argv)[0])
self.icon = wx.Icon(os.path.join(os.path.abspath(pathname),
"pyromaths.ico"), wx.BITMAP_TYPE_ICO)
else:
pathname = os.path.dirname((sys.argv)[0])
self.icon = wx.Icon(os.path.join(os.path.abspath(pathname),
"pyromaths.ico"), wx.BITMAP_TYPE_ICO)
self.SetIcon(self.icon)
# Crée la barre de status
self.CreateStatusBar()
self.SetStatusText(number=0, text=
u'Choisir un niveau, s\xe9lectionner des exercices, puis cliquer sur "Cr\xe9er".')
# Paramètre le menu
menu_fichier = wx.Menu()
menu_fichier.Append(ID_EXIT, '&Quitter',
'Quitter l\'application.')
menu_fichier.Append(ID_TOTALE, u'Tous les exercices', u'G\xe9n\xe9rer une feuille avec un exemplaire de chaque exercice.')
menu_about = wx.Menu()
menu_about.Append(ID_SITE, u'Acc\xe9der au &site',
u'Acc\xe9der au site de Pyromaths')
menu_about.AppendSeparator()
menu_about.Append(ID_ABOUT, u'\xc0 &propos',
u'\xc0 propos de Pyromaths.')
# Crée la barre de menu
menubar = wx.MenuBar()
menubar.Append(menu_fichier, "&Fichier")
menubar.Append(menu_about, "&Aide")
self.SetMenuBar(menubar)
# Crée le panel
self.ligne = wx.BoxSizer(wx.HORIZONTAL)
self.colonne_gauche = wx.BoxSizer(wx.VERTICAL)
self.colonne_droite = wx.BoxSizer(wx.HORIZONTAL)
self.SetBackgroundColour('#FBF5E1')
# Crée les RadiosButtons
self.niveaux_ctrls = []
radio0 = wx.RadioButton(self, -1, LesFiches[0][0], style=wx.RB_GROUP)
radio1 = wx.RadioButton(self, -1, LesFiches[1][0])
radio2 = wx.RadioButton(self, -1, LesFiches[2][0])
radio3 = wx.RadioButton(self, -1, LesFiches[3][0])
radio3.SetValue(True)
self.niveaux_ctrls.append(radio0)
self.niveaux_ctrls.append(radio1)
self.niveaux_ctrls.append(radio2)
self.niveaux_ctrls.append(radio3)
self.colonne_gauche.Add((10, 30), 0, wx.EXPAND)
for radio in self.niveaux_ctrls:
self.colonne_gauche.Add(radio, 0, wx.ALIGN_LEFT | wx.LEFT |
wx.RIGHT | wx.TOP, 5)
# Crée les boutons
self.bouton_continuer = wx.Button(self, -1, u"Cr\xe9er", pos=(50,
50))
self.bouton_continuer.SetDefault()
self.bouton_continuer.SetSize(self.bouton_continuer.GetBestSize())
self.bouton_fermer = wx.Button(self, -1, u"Quitter", pos=(50, 50))
self.bouton_fermer.SetSize(self.bouton_fermer.GetBestSize())
# Intègre la liste, les boutons é la colonne gauche
self.colonne_gauche.AddMany([((10, 50), 0, wx.EXPAND), (self.bouton_continuer,
0, wx.CENTER), ((10, 10), 0, wx.EXPAND),
(self.bouton_fermer, 0, wx.CENTER),
((10, 50), 0, wx.EXPAND)])
# Crée les options
self.option1 = wx.CheckBox(self, -1, u"Cr\xe9er un PDF", style=
wx.BU_EXACTFIT)
self.option1.SetValue(1)
self.colonne_gauche.Add(self.option1, 0, wx.CENTER)
# écrit la liste des exercices dans la colonne de droite
self.niveau_selectionne = 3 # le niveau par défaut est le niveau 3e
exos = LesFiches[3][2] # le niveau par défaut est le niveau 3e
self.exos1 = new_liste_exos(self, exos, 1)
self.exos2 = new_liste_exos(self, exos, 0)
self.colonne_droite.Add(self.exos1, 0, wx.EXPAND)
self.colonne_droite.Add(self.exos2, 0, wx.EXPAND)
self.ligne.Add(self.colonne_gauche, 0, wx.TOP)
self.ligne.Add(self.colonne_droite, 0, wx.TOP)
# BINDINGS
# Actions de la barre de menu
self.Bind(wx.EVT_MENU, self.OnExit, id=ID_EXIT)
self.Bind(wx.EVT_MENU, self.site, id=ID_SITE)
self.Bind(wx.EVT_MENU, self.About, id=ID_ABOUT)
self.Bind(wx.EVT_MENU, self.Totale, id=ID_TOTALE)
# Action des sélections dans les boutons radio
for radio in self.niveaux_ctrls:
self.Bind(wx.EVT_RADIOBUTTON, self.Radio_Button, radio)
# Actions des boutons
self.bouton_fermer.Bind(wx.EVT_BUTTON, self.OnExit, id=self.bouton_fermer.GetId())
self.bouton_continuer.Bind(wx.EVT_BUTTON, self.OnValide, id=self.bouton_continuer.GetId())
# Actions des options
# Inutile de créer une action pour ce bouton.
# self.Bind(wx.EVT_CHECKBOX, self.OnOption1,
# self.option1)
# Affiche la boite de dialogue Pyromaths
self.SetSizer(self.ligne)
self.SetAutoLayout(1)
self.SetSize(self.GetBestSize())
self.CenterOnParent(wx.BOTH)
self.Show(1)
def OnExit(self, event):
self.Close(True)
def site(self, event):
import webbrowser
webbrowser.open('http://www.pyromaths.org')
def About(self, event):
from dialog_box import MyAboutBox
about = MyAboutBox(self)
about.ShowModal()
about.Destroy()
def Totale(self, event):
i = 0
while i < 4:
latotale('/home/arnaud/totale_' + str(6 - i) + '.tex', '/home/arnaud/totale_' + str(6 - i) + '_cor.tex', i)
i += 1
def OnSelect(self, event):
pos = self.liste_niveaux.GetSelection()
self.commentaires.SetValue(LesFiches[pos][2])
def Radio_Button(self, event):
radio_selected = event.GetEventObject()
cpt = 0
self.colonne_droite.Clear(1)
for radio in self.niveaux_ctrls:
if radio is radio_selected:
self.niveau_selectionne = cpt
exos = LesFiches[cpt][2]
exos1 = new_liste_exos(self, exos, 1)
exos2 = new_liste_exos(self, exos, 0)
self.colonne_droite.Add(exos1, 0, wx.EXPAND)
self.colonne_droite.Add(exos2, 0, wx.EXPAND)
cpt = cpt + 1
self.ligne.Layout()
def OnGroupCheckBox(self, event):
for groups in (self.group_ctrls1, self.group_ctrls2):
for (sc, cb) in groups:
if cb.GetValue():
if not sc.GetValue():
sc.Enable(True)
sc.SetValue(1)
else:
sc.Enable(False)
sc.SetValue(0)
lst[sc.GetId()] = sc.GetValue()
def OnGroupSpinCtrl(self, event):
for groups in (self.group_ctrls1, self.group_ctrls2):
for (sc, cb) in groups:
if not sc.GetValue():
cb.SetValue(False)
sc.Enable(False)
lst[sc.GetId()] = sc.GetValue()
def OnValide(self, event):
progs = verifie_programmes(self)
entete = self.option1.GetValue()
listevide = True
for i in xrange(len(lst)):
if lst[i]:
listevide = False
break
if listevide:
dialog_box.Verif_progs(self,
u"Veuillez s\xe9lectionner des exercices...",
"Attention !")
else:
wildcard = \
u"Documents TeX (*.tex)|*.tex|Tous les fichiers (*.*)|*.*"
dossier = os.getcwd()
(f0, f1) = ("", "")
dlg = wx.FileDialog(self,
u"Enregistrer les exercices sous ...",
dossier, u"exercices.tex", wildcard, wx.SAVE |
wx.OVERWRITE_PROMPT)
if dlg.ShowModal() == wx.ID_OK:
f0 = dlg.GetPath()
dossier = dlg.GetDirectory()
nom_exo = dlg.GetFilename()
file = os.path.splitext(nom_exo)
if file[1].lower() == ".tex":
nom_exo = file[0]
else:
nom_exo = file[0] + file[1]
f0 = f0 + ".tex"
dlg.Destroy()
if f0:
dlg = wx.FileDialog(self,
u"Enregistrer le corrig\xe9 sous ...",
dossier, u"%s-corrige.tex" % nom_exo,
wildcard, wx.SAVE | wx.OVERWRITE_PROMPT)
if dlg.ShowModal() == wx.ID_OK:
f1 = dlg.GetPath()
if f1.lower().rfind(".tex", len(f1) - 4) < 0:
f1 = f1 + ".tex"
dlg.Destroy()
if f0 and f1:
LesFiches[self.niveau_selectionne][1].main(lst, f0, f1,
entete)
if entete:
print f0, f1
compilation(f0, f1, progs[0], progs[1], progs[2],
progs[3])
Jérôme, tu es contre le fait de fixer une variable pour le chemin ?
Parce que donner le chemin à chaque fois qu'on veut une feuille...