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 !!!!
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.