Générateur de script python

Description

générateur de script python est une application pour, comme son nom l'indique, générer un script minimum. On entre les renseignements demandés et l'application génère un script dans une fenêtre et lance l'utilitaire IDLE pour pouvoir lancer le script et l'étoffer.
Avant de commencer, lisez le fichier "lisez_moi.txt" joint dans l'archive

Source / Exemple :


from tkinter import*
from tkinter import ttk
import time,sys
from subprocess import call

class Fen:
    """instance de classe"""
    def __init__(self):
        self.root=Tk()
        self.center_window(650,980)
        self.root.title("minimum python")
        #-------------------------titre de notre application-------------------
        self.lab=Label(self.root,text="  configuration minimum d'un script python  ",
                       relief=SUNKEN,bd=2,font=24)
        self.lab.pack(pady=10,fill=BOTH)
        #titre-----------------------------------------------------------------
        self.f=LabelFrame(self.root)
        self.f.pack(fill=X)                 #inclure le titre du script
        Label(self.f,text="titre du script : ").pack(side=LEFT,fill=NONE,
                                                     expand=1,anchor=CENTER)
        self.entree_titre=Entry(self.f,width=70)
        self.entree_titre.focus_set()
        self.entree_titre.pack(side=TOP,fill=NONE,
                                                     expand=1,anchor=CENTER)      
        #précision sur le codage-----------------------------------------------
        self.frame=LabelFrame(self.root,padx=140,pady=10)
        self.frame.pack(fill=X)
        self.var_code=IntVar()#variable pour le controle le l'état du checkbutton
        self.code=Checkbutton(self.frame,text="inclure le codage", #inclure le codage
                              variable=self.var_code,command= self.com)
        self.code.pack(anchor=CENTER,expand=0)

        self.var_lat=IntVar()#variable pour le controle le l'état du checkbutton
        self.lat=Checkbutton(self.frame, text="Latin-1",variable=self.var_lat,
                           state=DISABLED,command= self.com2) # -*-coding:Latin-1 -*
        self.lat.pack(anchor=CENTER,expand=0)

        self.var_utf=IntVar()#variable pour le controle le l'état du checkbutton
        self.utf=Checkbutton(self.frame, text="UTF-8",variable=self.var_utf,
                           state=DISABLED,command= self.com2) # -*-coding:Utf-8 -*
        self.utf.pack()
        #importation-----------------------------------------------------------
        self.frame2=LabelFrame(self.root,padx=13)
        self.frame2.pack(fill=X)
        self.scrol=Scrollbar(self.frame2,orient=VERTICAL)
        self.scrol.pack(side=RIGHT,fill=Y)      
        self.scrol_y=Scrollbar(self.frame2,orient=HORIZONTAL)
        self.scrol_y.pack(side =BOTTOM,fill=X)
        #nommer les imports
        lab2=Label(self.frame2,text="  import :  ",anchor=W, justify=LEFT)
        lab2.pack(pady=20,side=LEFT,fill="none",expand=0,anchor=N)
        self.texte=Text(self.frame2,width=50,height=5,wrap=NONE)
        self.texte.pack(pady=20)#objet Text permettant de recevoir les imports
        self.texte.config(yscrollcommand=self.scrol.set,
                          xscrollcommand=self.scrol_y.set)
        self.scrol.config(command=self.texte.yview)
        self.scrol_y.config(command=self.texte.xview)

        self.frame3=LabelFrame(self.root,padx=94,pady=5)
        self.frame3.pack()
        self.var_nom=IntVar()#variable pour le controle le l'état du checkbutton
        self.nom=Checkbutton(self.frame3,text="Auteur",variable=self.var_nom,
                             command=self.com3)#checkbutton pour l'auteur
        self.nom.pack(side=LEFT,fill=BOTH)
        self.entree_nom=Entry(self.frame3,state=DISABLED)
        self.entree_nom.pack()

        self.frame4=LabelFrame(self.root,padx=93,pady=5)
        self.frame4.pack()
        self.var_licence=IntVar()#variable pour le controle le l'état du checkbutton
        self.licence=Checkbutton(self.frame4,text="licence",variable=self.var_licence,
                             command=self.com4)#checkbutton pour la licence
        self.licence.pack(side=LEFT,fill=BOTH)
        self.entree_licence=Entry(self.frame4,state=DISABLED)
        self.entree_licence.pack()

        self.frame5=LabelFrame(self.root,padx=91,pady=5)
        self.frame5.pack()
        self.var_version=IntVar()#variable pour le controle le l'état du checkbutton
        self.version=Checkbutton(self.frame5,text = "Version",variable=self.var_version,
                                 command=self.com5)#checkbutton pour la version
        self.version.pack(side=LEFT,fill=X,expand=1)
        self.entree_version=Entry(self.frame5,state=DISABLED)
        self.entree_version.pack()
                        
        self.generer=ttk.Button(self.root,text="générer",command=self.genere,
                            width=53)   #bouton pour générer le code
        self.generer.pack(pady=10,anchor=CENTER)

        #panneau du bas--------------------------------------------------------
        #sortie sur l'objet Text "texte2" de toutes les informations recueillies
        self.scrol2_x=Scrollbar(self.root,orient=VERTICAL)
        self.scrol2_x.pack(side=RIGHT,fill=Y)
        self.scrol2_y=Scrollbar(self.root,orient=HORIZONTAL)
        self.scrol2_y.pack(side=BOTTOM,fill=X)
        self.texte2=Text(self.root, width=60, height=17,wrap=NONE)
        self.texte2.pack(pady=10)
        self.texte2.config(yscrollcommand=self.scrol2_x.set,
                           xscrollcommand=self.scrol2_y.set)
        self.scrol2_x.config(command=self.texte2.yview)
        self.scrol2_y.config(command=self.texte2.xview)
                
        ttk.Button(self.root,text="Quitter", command =self.root.destroy,
                   width=53).pack(anchor=CENTER)#bouton pour quitter
        
        self.root.mainloop()#boucle principale 
        
    def center_window(self,w=300, h=200):
        """centre la fenetre en fonction de la résolution"""
        # on récupère la largeur et la hauteur de la fenetre
        ws = self.root.winfo_screenwidth()
        hs = self.root.winfo_screenheight()
        # on calcul la position x, y
        x = (ws/2) - (w/2)    
        y = (hs/2) - (h/2)
        self.root.geometry('%dx%d+%d+%d' % (w, h, x, 0))#dernier chiffre = 0
                                                        #pour coller la fenetre
                                                        #en haut
    def com(self):
        """commande du check bouton incluant les imports"""
        if self.var_code.get() == 1:
            self.lat.config(state=NORMAL)
            self.utf.config(state=NORMAL)            
        else:
            self.var_lat.set(0)
            self.var_utf.set(0)
            self.lat.config(state=DISABLED)
            self.utf.config(state=DISABLED)
            
    def com2(self):
        """commande du check bouton incluant l'encodage"""
        if self.var_lat.get()==1:
            self.utf.config(state=DISABLED)
        elif self.var_lat.get()==0:
            self.utf.config(state=NORMAL)
        if self.var_utf.get()==1:
            self.lat.config(state=DISABLED)
        elif self.var_utf.get()==0:
            self.lat.config(state=NORMAL)

    def com3(self):
        """commande du check bouton incluant l'auteur"""
        if self.var_nom.get()==1:
            self.entree_nom.config(state=NORMAL)
            self.entree_nom.focus_set()
        else:
            self.entree_nom.delete(0,END)
            self.entree_nom.config(state=DISABLED)

    def com4(self):
        """commande du check bouton incluant la licence"""
        if self.var_licence.get()==1:
            self.entree_licence.config(state=NORMAL)
            self.entree_licence.focus_set()
        else:
            self.entree_licence.delete(0,END)
            self.entree_licence.config(state=DISABLED)

    def com5(self):
        """commande du check bouton incluant la version"""
        if self.var_version.get()==1:
            self.entree_version.config(state=NORMAL)
            self.entree_version.focus_set()
        else:
            self.entree_version.delete(0,END)
            self.entree_version.config(state=DISABLED)

    def analyse(self,liste):
        """analyse la liste passée en argument pour obtenir le maxi de la liste"""
        maxi=0
        for i in liste:
            if len(i)>maxi:
                maxi=len(i)
        return maxi

    def X(self,nb):
        """determine le nombre d'espace avant et après le mot a encadrer de # """
        x=nb-(nb//2)#espace avant le mot
        y=(nb//2)   #espace après le mot
        return x,y

    def presente(self,l):
        """presentation avec un encadrement de symbole #   """
        maxi =self.analyse(l)
        maxi2=maxi+2
        self.texte2.insert(END,("#"*maxi2)+"\n")
        for i in l:
            x=len(i)
            sp=self.X(maxi-x)
            space1=(" "*int(sp[0]))
            space2=(" "*int(sp[1]))
            self.texte2.insert(END,"#"+space1+i+space2+"#\n")
        self.texte2.insert(END,"#"*maxi2+"\n\n")
        
    def genere(self):
        """genere le code minimal dans la fenetre texte2"""
        self.texte2.delete(1.0,END)
        self.date=time.strftime('%d/%m/%y',time.localtime())#date du document
        liste=[]#liste des imports a inclure
        if self.entree_titre.get():                #si l'entree contient quelque
            liste.append(self.entree_titre.get())  #chose ,on l'ajoute a la liste
        liste.append(self.date)
        if self.var_nom.get()==1:
            if self.entree_nom.get():  #si l'entrée auteur contient un element 
                liste.append("Auteur : "+self.entree_nom.get())#on l'ajoute à la liste
        if self.var_licence.get()==1:
            if self.entree_licence.get():#si l'entréée licence contient quelque chose
                liste.append("Licence : "+self.entree_licence.get())#on l'ajoute à la liste
        if self.var_version.get()==1:
            if self.entree_version.get():#si l'entrée version contient un element
                liste.append("Version : "+self.entree_version.get())#on l'ajoute à la liste
        self.presente(liste)
        #insertion du codage dans le texte           
        self.texte2.insert(END,"#!/usr/bin/python\n")
        if self.var_lat.get() == 1:
            self.texte2.insert(END,"# -*-coding:Latin-1 -*\n\n")
        if self.var_utf.get()==1:
            self.texte2.insert(END,"# -*-coding:Utf-8 -*\n\n")
        #insertion de l'auteur dans le texte
        if self.var_nom.get()==1:
            if self.entree_nom.get():
                self.texte2.insert(END,"__auteur__ = "+"\""+self.entree_nom.get()+"\""+"\n")
        #insertion de la licence dans le texte
        if self.var_licence.get()==1:
            if self.entree_licence.get():
                self.texte2.insert(END,"__licence__ = "+"\""+self.entree_licence.get()+"\""+"\n")
        #insertion de la version dans le texte
        if self.var_version.get()==1:
            if self.entree_version.get():
                self.texte2.insert(END,"__version__ = "+"\""+self.entree_version.get()+"\""+"\n")
        self.texte2.insert(END,"\n")
        l=self.texte.get(1.0,END).split("\n")
        
        for i in l:#importation pour le code
            if i != "":
                if "import" in i:
                    self.texte2.insert(END,i+"\n")
                else:
                    self.texte2.insert(END,"import "+i+"\n")
        with open("generate","w") as f:    #ouvre le fichier "generate" si il 
            copy=self.texte2.get(1.0,END)  #existe sinon on le créé
            f.write(copy)
        for i in sys.path:
            if "idlelib" in i:
                path = i
        path=path.replace("\\","/")
        path=path+"/idle.bat generate"
        #Ouvre IDLE et envoi les données entrées dans le script
        #Changer le chemin d'acces  pour un autre utilitaire dont vous entrez
            #le chemin
        #Laisser l'instruction "generate" à la fin
        #Doubler les antislash "\" dans le chemin d'accès
            
        call(path)
        
if __name__== "__main__":
    app=Fen()  #creation de l'objet Fen, fenetre principal de notre application

Conclusion :


ce script peut rendre service à certains d'entre vous !!!!

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.