lilypond-user-fr
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: outil de génération


From: P.E. Brame
Subject: Re: outil de génération
Date: Sun, 05 Nov 2006 14:37:51 +0100
User-agent: Thunderbird 1.5.0.7 (X11/20060922)

Bonjour,

Je reprends clavier et écran.

Ci-joint les scripts refusés ? par l'outil de gestion des messages de la liste.
Le fichier score_lily.py contient le point d'entrée (main)

Bonne journée

P.E. Brame

address@hidden a écrit :
Envoyez vos messages pour la liste lilypond-user-fr à
	address@hidden

Pour vous (dés)abonner par le web, consultez
	http://lists.gnu.org/mailman/listinfo/lilypond-user-fr

ou, par email, envoyez un message avec 'help' dans le corps ou dans le
sujet à
	address@hidden

Vous pouvez contacter l'administrateur de la liste à l'adresse
	address@hidden

Si vous répondez, n'oubliez pas de changer l'objet du message afin
qu'il soit plus spécifique que "Re: Contenu du digest de
lilypond-user-fr..."


Thèmes du jour :

   1. Re: outil de génération (John Mandereau)
   2. Re: outil de génération (André Hetzel)
   3. Re: outil de génération (Pierre Couderc)
   4. Re: outil de génération (P.E. Brame)


----------------------------------------------------------------------

Message: 1
Date: Sat, 04 Nov 2006 22:14:21 +0100
From: John Mandereau <address@hidden>
Subject: Re: outil de génération
To: address@hidden
Cc: address@hidden
Message-ID: <address@hidden>
Content-Type: text/plain; charset=utf-8

Le samedi 04 novembre 2006 à 11:30 +0100, P.E. Brame a écrit :
  
Bonjour à tous,

Je suis en phase de finalisation d'un générateur de fichier .ly,, écrit 
en python 2.4.3 / wxwidgets 2.7, principalement à l'attention des 
défricheurs de Lilypond réfractaires à une lecture assidue de la 
documentation en anglais.
    

Ce projet est une bonne idée, qui ressemble au plugin LilyPondTool pour
JEdit, mais sans doute avec l'avantage d'éviter la lourdeur de Java et
par conséquent de JEdit. Si ce projet mûrit suffisament, il pourra
peut-être être distribué avec LilyPond :-)

À propos, sur la liste lilyond-user est apparu récemment un fil sur
l'utilité d'une interface graphique pour éditer des fichiers ly. Je
partage l'idée de certains selon laquelle une solution efficace serait
un éditeur de texte avancé (coloration syntaxique, compilation et
visualisation depuis l'éditeur, ...), avec des plugins à interface
graphique qui aident à réaliser certaines tâches.

En effet, le format ly est un format texte, donc un éditeur de texte est
naturellement efficace pour le traiter. Les inconvénients d'une
interface graphique excluant le code source sont la perte de vue des
concepts de séparation du contenu musical et de ses options de
formatage. On pourrait également imaginer une solution hybride, comme
certains éditeurs HTML graphiques qui proposent un onglet pour l'édition
visuelle, un onglet pour l'édition du texte source, et un onglet pour la
prévisualisation.

Voilà une très rapide présentation de la question. Qu'en pensez-vous ?


  
Je joint à ce mail un fichier compressé contenant les scripts et une 
documentation
    

En tant qu'administrateur, je rappelle que les messages de plus de 64 Ko
ne sont pas autorisés sur la liste.

Pour nous faire profiter de ton travail, donne-nous un lien vers un site
où on peut le télécharger. Si tu n'as pas d'espace Web pour ça, il est
tout à fait possible de l'héberger sur
http://lilypondwiki.tuxfamily.org . N'hésite pas à me contacter pour
plus de précisions.

Cordialement
  
#!/usr/bin/python
# -*- coding: utf8 -*-
import wx
##########################################################
##
##              traitement des score
##
##########################################################
class fen_score(wx.Frame):
        def __init__ ( self, titre):
                self. d_score = {}              # contient les infos du bloc 
score
                self.l_port = []                        # liste des dicos du 
bloc Staff
                self.l_score = []                       # liste des dicos score 
à retourner
                x = 0   # placement des cellules sur la grille
                y = 0
                wx.Frame.__init__(self, None, wx.ID_ANY, title = titre, pos = 
(300,300) )               # création 
                grille = wx.GridBagSizer()              # création de la 
grille type tableur : accès direct aux cellules
                self.t_nom = wx.TextCtrl(self, wx.ID_ANY, 'score' )             
# champ de saisie
                e_nom = wx.StaticText(self, wx.ID_ANY, "nom " ) # etiquette 
associée
                self.t_type = wx.TextCtrl(self, wx.ID_ANY, "ChoirStaff")
                e_type = wx.StaticText(self, wx.ID_ANY, "type : " )
                self.t_tempo = wx.TextCtrl(self, wx.ID_ANY, '4/4' )
                e_tempo = wx.StaticText(self, wx.ID_ANY, "tempo" )      # 
etiquette associée
                self.t_armature = wx.TextCtrl(self, wx.ID_ANY, "do")
                e_armature = wx.StaticText(self, wx.ID_ANY, "tonalité (majeur) 
: " )
                self.t_vitesse = wx.TextCtrl(self, wx.ID_ANY, '4 = 80' )
                e_vitesse = wx.StaticText(self, wx.ID_ANY, "vitesse" )  # 
etiquette associée

                b_score_ok = wx.Button(self, wx.ID_ANY , "OK")
                b_portee = wx.Button(self, wx.ID_ANY , "Ajout Portée")
                b_fermer = wx.Button(self, wx.ID_ANY , "Fermer")
                self.Bind( wx.EVT_BUTTON, self.b_score_ok_clic, b_score_ok)
                self.Bind( wx.EVT_BUTTON, self.b_portee_clic, b_portee)
                self.Bind( wx.EVT_BUTTON, self.b_fermer_clic, b_fermer)
        
                grille.Add(e_nom, (x,y), (1,1), wx.EXPAND )
                grille.Add (self.t_nom, (x,y+1) , (1,1) , wx.EXPAND )   # ajout 
des champs  : objet, où (L, C), extension (nb L, nb C), formatage
                x += 1
                grille.Add(e_type, (x,y), (1,1), wx.EXPAND )
                grille.Add(self.t_type, (x,y+1), (1,1), wx.EXPAND )
                x += 1
                grille.Add(e_tempo, (x,y), (1,1), wx.EXPAND )
                grille.Add(self.t_tempo, (x,y+1), (1,1), wx.EXPAND )
                x += 1
                grille.Add(e_vitesse, (x,y), (1,1), wx.EXPAND )
                grille.Add(self.t_vitesse, (x,y+1), (1,1), wx.EXPAND )
                x += 1
                grille.Add(e_armature, (x,y), (1,1), wx.EXPAND )
                grille.Add(self.t_armature, (x,y+1), (1,1), wx.EXPAND )
                x += 2
                grille.Add(b_portee, (x, 0), (1, 1))
                grille.Add(b_fermer, (x, 1), (1, 1))
                grille.Add(b_score_ok, (x, 2), (1, 1))
                grille.AddGrowableCol(1)        
                self.SetSizerAndFit(grille)             # mise en place finale
                self.Show(True)                                 # et affichage
                
        def b_score_ok_clic(self, ev_b_score_ok):               # fin de 
l'ajout d'un nouveau bloc score
                self.d_score ['nom'] = self.t_nom.GetValue()
                self.d_score ['type'] = self.t_type.GetValue()
                self.d_score ['armature'] = self.t_armature.GetValue()
                self.d_score ['tempo'] = self.t_tempo.GetValue()
                self.d_score ['vitesse'] = self.t_vitesse.GetValue()
                self.d_score ['liste_dp'] = self.l_port         # 
#################################" 
                self.Destroy()
##              return self.l_score
#               return True
                
        def b_portee_clic(self, ev_b_portee):
                self.fenetre_portee = fen_portee("Portée")
                self.l_port.append ( self.fenetre_portee.lit_portee() )
                return True
                
        def b_fermer_clic(self, ev_b_fermer):
                self.Destroy()
                
        def lit_part(self ):            # réellement ici ou dans le b_score_ok 
?
                return self.d_score
                
##########################################################
##
##              traitement des portées (Staff)
##
##########################################################
                
class fen_portee(wx.Frame):
        def __init__ ( self, titre):
                self. d_port = {}
                self.l_port = []                # liste des portées à 
retourner
                self.l_voix = []                # liste des voix associées à 
la portée
                x = 0   # placement des cellules sur la grille
                y = 0
                wx.Frame.__init__(self, None, wx.ID_ANY, title = titre, pos = ( 
250, 250 ) )            # création 
                grille = wx.GridBagSizer()              # création de la 
grille type tableur : accès direct aux cellules
                self.t_portee = wx.TextCtrl(self, wx.ID_ANY, 'Portée', 
size=(150, 30) )                # champ de saisie
                e_portee = wx.StaticText(self, wx.ID_ANY, "nom " )      # 
etiquette associée
                self.t_clef = wx.TextCtrl(self, wx.ID_ANY, "violin")
                e_clef = wx.StaticText(self, wx.ID_ANY, "Clef" )
                self.t_instrum = wx.TextCtrl(self, wx.ID_ANY, "violon" )
                e_instrum = wx.StaticText(self, wx.ID_ANY, "Instrument : " )
                self.t_instr = wx.TextCtrl(self, wx.ID_ANY, "S")
                e_instr = wx.StaticText(self, wx.ID_ANY, "Instr : " )
                self.t_instr_midi = wx.TextCtrl(self, wx.ID_ANY, "midi")
                e_instr_midi = wx.StaticText(self, wx.ID_ANY, "Instr midi : " )
                b_portee_ok = wx.Button(self, wx.ID_ANY , "OK")
                b_voix = wx.Button(self, wx.ID_ANY , "Ajout voix")
                b_fermer = wx.Button(self, wx.ID_ANY , "Fermer")
                self.Bind( wx.EVT_BUTTON, self.b_portee_ok_clic, b_portee_ok)
                self.Bind( wx.EVT_BUTTON, self.b_voix_clic, b_voix)
                self.Bind( wx.EVT_BUTTON, self.b_fermer_clic, b_fermer)
        
                grille.Add(e_portee, (x,y), (1,1), wx.EXPAND )
                grille.Add (self.t_portee, (x,y+1) , (1,1) , wx.EXPAND )        
# ajout des champs  : objet, où (L, C), extension (nb L, nb C), formatage
                x += 1
                grille.Add(e_clef, (x,y), (1,1), wx.EXPAND )
                grille.Add(self.t_clef, (x,y+1), (1,1), wx.EXPAND )
                x += 1
                grille.Add(e_instrum, (x,y), (1,1), wx.EXPAND )
                grille.Add ( self.t_instrum, (x, y+1), (1, 1), wx.EXPAND )
                x += 1
                grille.Add(e_instr, (x,y), (1,1), wx.EXPAND )
                grille.Add(self.t_instr, (x,y+1), (1,1), wx.EXPAND )
                x += 1
                grille.Add(e_instr_midi, (x,y), (1,1), wx.EXPAND )
                grille.Add(self.t_instr_midi, (x,y+1), (1,1), wx.EXPAND )
                x += 2
                grille.Add(b_voix, (x, 0), (1, 1))
                grille.Add(b_fermer, (x, 1), (1, 1))
                grille.Add(b_portee_ok, (x, 2), (1, 1))

                grille.AddGrowableCol(0)        
                self.SetSizerAndFit(grille)             # mise en place finale
                self.Show(True)                                 # et affichage
                
        def b_portee_ok_clic(self, ev_b_portee_ok):             # fin de 
l'ajout d'un nouveau bloc staff
                self.d_port['portee'] = self.t_portee.GetValue()
                self.d_port['clef'] = self.t_clef.GetValue()
                self.d_port['instrument'] = self.t_instrum.GetValue()
                self.d_port['instr'] = self.t_instr.GetValue()
                self.d_port['instr_midi'] = self.t_instr_midi.GetValue()
                self.d_port['liste_dv'] = self.l_voix   # # 
############################################
                self.Destroy()
                
        def b_voix_clic(self, ev_b_portee):
                self.fenetre_voix = fen_voix("Voix")
                self.l_voix.append( self.fenetre_voix.lit_voix()        )       
        # ajout d'une liste de dictionnaire(s)de  voix dans la liste
                
        def b_fermer_clic(self, ev_b_fermer):
                self.Destroy()
                
        def lit_portee(self):
                return self.d_port
##########################################################
##
##              traitement des Voix
##
##########################################################
                
class fen_voix(wx.Frame):
        def __init__ ( self, titre):
                self. d_voix = {}
                self.l_voix = []
                x = 0   # placement des cellules sur la grille
                y = 0
                wx.Frame.__init__(self, None, wx.ID_ANY, title = titre, pos = ( 
300, 300 ) )            # création 
                grille = wx.GridBagSizer()              # création de la 
grille type tableur : accès direct aux cellules
                self.t_voix = wx.TextCtrl(self, wx.ID_ANY, 'Voix' )             
# champ de saisie
                e_voix = wx.StaticText(self, wx.ID_ANY, "nom :" )       # 
etiquette associée
                self.t_paroles = wx.TextCtrl(self, wx.ID_ANY, "")
                e_paroles = wx.StaticText(self, wx.ID_ANY, "Paroles associées" 
)
                self.t_notes = wx.TextCtrl(self, wx.ID_ANY, "N" )
                e_notes = wx.StaticText(self, wx.ID_ANY, "Nom mélodie : " )
                self.t_transpose = wx.TextCtrl(self, wx.ID_ANY, "")
                e_transpose = wx.StaticText(self, wx.ID_ANY, "transposer vers : 
" )
                b_voix_ok = wx.Button(self, wx.ID_ANY , "OK")
                b_fermer = wx.Button(self, wx.ID_ANY , "Fermer")

                self.Bind( wx.EVT_BUTTON, self.b_voix_ok_clic, b_voix_ok)
                self.Bind( wx.EVT_BUTTON, self.b_fermer_clic, b_fermer)
                grille.Add(e_voix, (x,y), (1,1), wx.EXPAND )
                grille.Add (self.t_voix, (x,y+1) , (1,1) , wx.EXPAND )  # ajout 
des champs  : objet, où (L, C), extension (nb L, nb C), formatage
                x += 1
                grille.Add(e_paroles, (x,y), (1,1), wx.EXPAND )
                grille.Add(self.t_paroles, (x,y+1), (1,1), wx.EXPAND )
                x += 1
                grille.Add(e_voix, (x,y), (1,1), wx.EXPAND )
                grille.Add(self.t_voix, (x,y+1), (1,1), wx.EXPAND )
                x += 1
                grille.Add(e_notes, (x,y), (1,1), wx.EXPAND )
                grille.Add ( self.t_notes, (x, y+1), (1, 1), wx.EXPAND )
                x += 1
                grille.Add(e_transpose, (x,y), (1,1), wx.EXPAND )
                grille.Add(self.t_transpose, (x,y+1), (1,1), wx.EXPAND )
                x += 2
                grille.Add(b_voix_ok, (x, 0), (1, 1))
                grille.Add(b_fermer, (x, 2), (1, 1))

                grille.AddGrowableCol(0)        
                self.SetSizerAndFit(grille)             # mise en place finale
                self.Show(True)                                 # et affichage
                
        def b_voix_ok_clic(self, ev_b_portee_ok):               # fin de 
l'ajout d'un nouveau bloc voix
                self.d_voix['voix'] = self.t_voix.GetValue()
                self.d_voix['paroles'] = self.t_paroles.GetValue()
                self.d_voix['notes'] = self.t_notes.GetValue()
                self.d_voix['transpose'] = self.t_transpose.GetValue()
                self.Destroy()
                
        def b_fermer_clic(self, ev_b_fermer):
                self.Destroy()
                
        def lit_voix(self):
                return self.d_voix
                

Attachment: score.pyc
Description: application/python-code

#!/usr/bin/python
# -*- coding: utf8 -*-
# projet pour génération automatique de scores

import wx
import os
import score

class fen(wx.Frame):
        def __init__(self, titre):
                self. d_part = {}
                self.l_score = []               # liste de d_score crées dans 
la fenetre score
                self.rep = ""                   # répertoire de travail
                wx.Frame.__init__(self, None, wx.ID_ANY, title = titre , pos = 
(200,200) )              # création de la fenetre de premier niveau
                self.grille = wx.GridBagSizer()         # création de la 
grille type tableur : accès direct aux cellules
                self.t_fic = wx.TextCtrl(self, wx.ID_ANY, 'lily.ly' )           
# champ de saisie, size=(150, 30)
                e_fic = wx.StaticText(self, wx.ID_ANY, "fichier à générer" ) 
# etiquette associée
                self.t_version = wx.TextCtrl(self, wx.ID_ANY, "2.8.6")
                e_version = wx.StaticText(self, wx.ID_ANY, "version : " )
                self.t_part = wx.TextCtrl(self, wx.ID_ANY, 'Titre')             
# champ de saisie, size=(150, 30) 
                e_part = wx.StaticText(self, wx.ID_ANY, "Titre partition" )     
# etiquette associée
                self.t_inclusion = wx.TextCtrl(self, wx.ID_ANY, 
"italiano.ly\n", style = wx.TE_MULTILINE)
                e_inclusion = wx.StaticText(self, wx.ID_ANY, "Inclusions : " )

                b_ok = wx.Button(self, wx.ID_ANY , "OK")
                b_score = wx.Button(self, wx.ID_ANY , "Ajout Score")
                b_fermer = wx.Button(self, wx.ID_ANY , "Fermer")
                b_rep = wx.Button(self, wx.ID_ANY , "Naviguer")
                self.Bind( wx.EVT_BUTTON, self.b_ok_clic, b_ok)
                self.Bind( wx.EVT_BUTTON, self.b_score_clic, b_score)
                self.Bind( wx.EVT_BUTTON, self.b_fermer_clic, b_fermer)
                self.Bind( wx.EVT_BUTTON, self.b_rep_clic, b_rep )
                x = 0
                self.grille.Add (self.t_fic, (x,1) , (1,1) , wx.EXPAND )        
# ajout des champs  : objet, où (L, C), extension (nb L, nb C), formatage
                self.grille.Add(e_fic, (x,0), (1,1), wx.EXPAND )
                self.grille.Add(b_rep, (x,2) , ( 1,1 ) , wx.EXPAND )            
# dialogue de changement de répertoire
                x +=1
                self.grille.Add(e_version, (x,0), (1,1), wx.EXPAND )
                self.grille.Add(self.t_version, (x,1), (1,1), wx.EXPAND )
                x+=1
                self.grille.Add(e_part, (x,0), (1,1), wx.EXPAND )
                self.grille.Add(self.t_part, (x,1), (1,1), wx.EXPAND )
                x +=1
                self.grille.Add ( e_inclusion, (x,0) , (1,1) , wx.EXPAND )
                self.grille.Add(self.t_inclusion, (x,1), (1,1), wx.EXPAND )
                x +=2
                self.grille.Add(b_score, (x, 0), (1, 1))
                self.grille.Add(b_fermer, (x, 1), (1, 1))
                self.grille.Add(b_ok, (x, 2), (1, 1))
#               self.grille.AddGrowableCol(0)           # redimension des 
champs possible
                self.grille.AddGrowableCol(1)           
#               self.grille.AddGrowableCol(2)
#               self.SetSizeHints(-1,self.GetSize().y,-1,2*(self.GetSize().y) 
);        # blocage en Y à sa taille actuelle, en X -1 => illimité
#                                                                               
                                                                                
                                        # min X, min Y, max X, max Y
                self.SetSizerAndFit(self.grille)                # mise en place 
finale
                self.Show(True)                                 # et affichage
                
        def b_rep_clic (self, ev_b_rep):
                fen_rep = wx.DirDialog(self, "Répertoire", 
style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON)
                if fen_rep.ShowModal() == wx.ID_OK:
                        self.SetStatusText( fen_rep.GetPath() )
                        self.rep = fen_rep.GetPath()
                        self.t_fic.SetValue( self.rep +"/lily.ly")
                        self.SetSizerAndFit(self.grille)                # 
redimensionne la fenetre
                fen_rep.Destroy()
                
        def fichier (self, ev_fic):
                fen_fic = wx.FileDialog(self, "Fichier :", os.getcwd(), "", 
"*.*", wx.OPEN)
                if fen_fic.ShowModal() == wx.ID_OK:
                        chemin = fen_fic.GetPath()
                        chemin_base = os.path.basename( chemin )
                        self.SetStatusText("chemin courant : %s" % chemin_base )
                fen_fic.Destroy()
                
        def b_ok_clic(self, ev_b_ok):           # fin de l'acquisition des 
données
                self.d_part ['fic']= self.t_fic.GetValue()
                self.d_part ['part'] = self.t_part.GetValue()
                self.d_part ['version'] = self.t_version.GetValue()
                self.d_part ['liste_ds'] = self.l_score
##########################################################
##
##              Création du fichier
##
##########################################################

                fic_sort = open ( self.d_part ['fic'], 'w')
#               fic_sort.write ('%  Essai de génération automatique \n')
                fic_sort.write('\\version "'+ self.d_part['version'] +'"\n' )
                fic_sort.write('\\header { title = "' +   self.d_part ['part'] 
+ '" }\n\n')
                fic_sort.write ( '% Inclusions \n' )
                for n_inclus in range ( self.t_inclusion.GetNumberOfLines() ) :
                        if ( self.t_inclusion.GetLineLength (n_inclus ) > 0 ) :
                                fic_sort.write ( '\include "%s"\n' % 
self.t_inclusion.GetLineText( n_inclus) )
                liste =  self.d_part['liste_ds']
                
                for n_score in range ( len ( liste ) ) : # balayage des blocs 
scores disponibles et écriture dans le fichier
                        dico_score = liste[ n_score ]
                        nom_score = dico_score['nom']           # dans bloc 
header
                        tempo_score = dico_score['tempo']
                        type_score = dico_score['type']
                        armature_score = dico_score['armature']
                        vitesse_score = dico_score['vitesse']
                        liste_dp_score = dico_score['liste_dp']
                        fic_sort.write('\score {\n \t\context %s \n' % 
type_score )
                        fic_sort.write('\t<<\n')

                        for  n_port in range ( len( liste_dp_score )  ) 
:#création des blocs Staff
                                dico_portee = liste_dp_score[ n_port ]
                                clef = dico_portee ['clef']
                                instrument = dico_portee ['instrument']
                                instr = dico_portee ['instr']
                                instr_midi =  dico_portee ['instr_midi']
                                nom_port = dico_portee ['portee']
                                liste_dv_portee = dico_portee ['liste_dv']
                                if ( len ( str ( nom_port ) ) > 0 ) :
                                        nom_port = " = " + nom_port
                                fic_sort.write('\t\t\context Staff %s 
\n\t\t<<\n'  % ( nom_port ) ) 
                                fic_sort.write ('\t\t\t\set Staff.instrument = 
\markup { \column { %s } }\n' % instrument )
                                fic_sort.write('\t\t\t\set Staff.midiInstrument 
= "%s"\n' % instr_midi )
                                fic_sort.write('\t\t\t\clef %s \n' % clef )
                                fic_sort.write('\t\t\t\key %s \major\n' % 
armature_score )
                                fic_sort.write('\t\t\t\\time %s\n'% tempo_score 
)
                                
                                for n_voix in range ( len ( liste_dv_portee ) ) 
:               # ajout des voix à la portée
                                        dico_voix = liste_dv_portee [ n_voix ]
                                        nom_notes = dico_voix ['notes' ]
                                        nom_paroles = dico_voix ['paroles' ]
                                        ton_transpose = dico_voix['transpose']
                                        nom_voix = dico_voix ['voix' ]
                                        fic_sort.write ( '\t\t\t\context Voice 
= %s { \%s }\n' % (nom_voix, nom_notes ) )
                                        if ( ton_transpose != "" ) :            
# au niveau de la defifnition des notes ?
                                                fic_sort.write ( 
'\t\t\t\\transpose do %s \n' % (ton_transpose )  )
                                        if ( nom_paroles != "") :
                                                fic_sort.write ( 
'\t\t\t\lyricsto "%s" \context Lyrics \%s \n' % (nom_voix, nom_paroles ) )
                        fic_sort.write ( '\t\t>>\n' )   # fin d'un bloc Staff
                fic_sort.write ( '\t>>\n' )     # fin d'un bloc type
                if ( vitesse_score != "" ) :
                        fic_sort.write ('\t\midi { \t\t\\tempo %s \n\t}\n' % 
vitesse_score )
                        fic_sort.write ('\t\layout { }\n' )
                        
                fic_sort.write ('\t\header { piece = "%s" }\n'  % nom_score ) 
                fic_sort.write ( "}\n" )        # fin d'un bloc score ajouter 
au dessus les blocs header
#self.d_score['liste_dp']['type']
                fic_sort.close()
#               return self.d_part              # retourne à qui ?
                
        def b_score_clic(self, ev_b_score):             # acquisistion d'un 
nouveau bloc score
                self.fenetre_score = score.fen_score("Score")
                self.l_score.append ( self.fenetre_score.lit_part() )
                return True
                
        def b_fermer_clic ( self, ev_b_fermer):
                self.Destroy()

class fen_principale(wx.App):
        def OnInit(self):
                self.fenetre = fen('essai.py')
                self.fenetre.Show(True)
                self.SetTopWindow(self.fenetre)
                return True
        
if __name__ == "__main__" :
        d_score = {}
        appli = fen_principale()
        appli.MainLoop()
#fic_sor = 

reply via email to

[Prev in Thread] Current Thread [Next in Thread]