Salut à tous,
J'ai créé des fonctions de parcours de quelques endroits stratégiques des
disques durs à la recherche des versions de python installés sur l'ordinateur
courant.
J'arrive à faire lister ces versions dans un sous menu du menu outils, mais mon
problème est que je ne sais pas comment déterminer que l'utilisateur à cliqué
sur tel ou tel élément de menu représentant une version du python.
Dans la documentation, il n'ya que l'attribut "action" qui peut permettre
d'associer un élément de menu à une fonction qui s'exécutera lors du click.
Or, cette association ne me convient pas parce que lors de ce processus de
génération, je ne peux et ne veux décemment pas créer à l'avance une fonction
pour chaque élément de menu.
Je remarque que cela aurait pu être résolu par un évènement lié aux menus par
lequel on peut capter qu'un click a été fait sur les menus, et que le name de
celui sur lequel on a cliqué est celui-ci.
Comment puis-je faire pour contourner/solutionner le problème ?
De plus, j'ai fait l'expérience que dans d'autres langage, en plus des
attributs "name" et "ID" à l'objet menu, il est proposé un attribut "tag" qui
sert de fourre-tout ou si vous voulez de container dans lequel on peut stoquer
une valeur à réutiliser plus tard.
Hé bien, cela n'existant pas ou pas encore dans le 6pad++, j'ai du comme qui
dirait me débrouiller.
Pour illustrer cette limitation, j'en viendrais toujours à mon code de
génération des menus, où en l'absence d'un attribut "tag", et l'attribut ID
étant strictement numérique, j'ai été obligé de stoquer le chemin vers le
dossier de chaque version du python dans
l'attribut "name".
Ce qui est passé, mais n'est pas du tout élégant comme vous le conviendrez avec
moi.
Bon, je ne m'en irais pas sans vous coller ce fameux code dont je vous rabache
les oreilles depuis le début.
Début du code python
def addListOfPythonInstalledInMenu (mnu):
# liste les versions de python installés et les référence dans le menu
'versions de python'
# dans tous les repertoires où elles peuvent se trouver.
searchPythonInstalledInDirectory(mnu, "c:\\")
searchPythonInstalledInDirectory(mnu, "c:\\Programs\\")
searchPythonInstalledInDirectory(mnu, "C:\\Program Files\\")
searchPythonInstalledInDirectory(mnu, "d:\\")
searchPythonInstalledInDirectory(mnu, "d:\\Programs\\")
searchPythonInstalledInDirectory(mnu, "d:\\Program Files\\")
searchPythonInstalledInDirectory(mnu, "e:\\")
searchPythonInstalledInDirectory(mnu, "e:\\Programs\\")
searchPythonInstalledInDirectory(mnu, "e:\\Program Files\\")
# end def
def searchPythonInstalledInDirectory(mnu, sPath):
# Liste les versions de python pour un repertoire particulier.
i=-1
f=""
l=[]
sFld=""
if os.path.isdir(sPath)==False: return
found=os.listdir(sPath)
for f in found:
if re.match("^python\d\.*\d", f, re.I):
# on détermine si il existe un fichier python.exe
if os.path.isfile(sPath+f+"\\python.exe"):
i=i+1
sFld=sPath+f
mnu.add(f+" de "+sFld, None, -1, "", sFld)
# end if
# end if
# end for
# end def
Fin du code python
Amicalement,
Yannick Daniel Youalé
La programmation est une religion. Aimez-la, ou quittez-la.
www.visuweb.net