Utilisation de py2exe pour transformer mon script python en exécutable Windows [Résolu]

Signaler
Messages postés
14
Date d'inscription
lundi 31 août 2020
Statut
Membre
Dernière intervention
18 septembre 2020
-
Messages postés
14
Date d'inscription
lundi 31 août 2020
Statut
Membre
Dernière intervention
18 septembre 2020
-
Bonjour,
je progresse doucement en programmation python.
J'ai fais un petit script python
#-------------------------------------------------------------------------------
# Name: FrancsEuro.py
# Purpose:
#
# Author:
#
# Created: 25/08/2020
# Copyright: 2020
# Licence: <your licence>
#-------------------------------------------------------------------------------
from tkinter import *
import tkinter.messagebox
from PIL import ImageTk, Image
import pygame
import os
import winsound
frequency = 2500 # Set Frequency To 2500 Hertz
duration = 500 # Set Duration To 1000 ms == 1 second

#*******************************************************************************
# MUSIQUE
# Fonction de choix avec ou sans musique
def choix_musique():
if btn_couperMusique["text"] == "Stop musique" :
btn_couperMusique["text"] = "Jouer musique"
couper_musique()
else:
btn_couperMusique["text"] = "Stop musique"
jouer_musique()

# On dit au revoir
def jouer_aurevoir():
pygame.mixer.init()
pygame.mixer.music.load("aurevoir.wav")
pygame.mixer.music.play()

# On joue une petite musique
def jouer_musique():
pygame.mixer.init()
pygame.mixer.music.load("Mozard1.wav")
pygame.mixer.music.play()

# Fonction d'arrêt de la musique
def couper_musique():
pygame.mixer.music.stop()

#*******************************************************************************
# Fonction de destruction de la fenêtre principale suite à un événement clavier
def exit(event):
root.destroy()


#*******************************************************************************
# Fonction de choix d'un mode Francs->Euros ou Euros->Francs
def switch_feef():
# On efface les deux champs de saisie
Euros.delete(0 , END)
Francs.delete(0 , END)
if btn_ch_mode["text"] == "Francs -> Euros" :
btn_ch_mode["text"] = "Euros -> Francs"
root.title("Conversion actuelle Francs->Euros")
Francs.focus_set()
else:
btn_ch_mode["text"] = "Francs -> Euros"
root.title("Conversion actuelle Euros->Francs")
Euros.focus_set()
btn_effacer["state"] = "disabled"
#*******************************************************************************

#*******************************************************************************
# On effectue la conversion
def convert(event):
# Si le curseur clignote dans le champ Francs mise à jour cohérente
if str(root.focus_get()) == '.!entry' :
btn_ch_mode["text"] = "Euros -> Francs"
root.title("Conversion actuelle Francs->Euros")
# Si le curseur clignote dans le champ Euros mise à jour cohérente
elif str(root.focus_get()) == '.!entry2' :
btn_ch_mode["text"] = "Francs -> Euros"
root.title("Conversion actuelle Euros->Francs")

# Si Francs et Euros sont remplis et que nous sommes en mode Francs -> Euros
# l'utilisateur veut faire un autre calcul alors, on refait le calcul
if ((Francs.get() != "") and (Euros.get() != "")) and btn_ch_mode["text"] == "Euros -> Francs":
try :
tmp = float(Francs.get()) * 0.1524
except :
tkinter.messagebox.showerror('Francs', '( ' + Francs.get() +' )' + ' n\'est pas une somme correcte')
Francs.insert(0, 'Saisie incorrecte')
winsound.Beep(frequency, duration)
btn_effacer["state"] = "normal"
effacer()
else :
round = float("%0.2f" % tmp)
strround = str(round)
Euros.delete(0 , END)
Euros.insert(0, strround + ' €')
# Si Francs et Euros sont remplis et que nous sommes en mode Euros -> Francs
# l'utilisateur veut faire un autre calcul alors, on refait le calcul
elif ((Francs.get() != "") and (Euros.get() != "")) and btn_ch_mode["text"] == "Francs -> Euros":
try :
tmp = float(Euros.get()) * 6.5596
except :
tkinter.messagebox.showerror('Euros', '( ' + Euros.get() +' )' + ' n\'est pas une somme correcte')
winsound.Beep(frequency, duration)
btn_effacer["state"] = "normal"
effacer()
Euros.insert(0, 'Saisie incorrecte')
else :
round = float("%0.2f" % tmp)
strround = str(round)
Francs.delete(0 , END)
Francs.insert(0, strround + ' F')
# Sinon fonctionnement normal
else :
x = Francs.get()
y = Euros.get()
# Si Francs et Euros sont vides le bouton Effacer est grisé
if (x == "") and (y == ""):
btn_effacer["state"] = "disabled"
else:
btn_effacer["state"] = "normal"

if (x != "" ) and (y == ""):
# Vérification de la bonne saisie de Francs
try :
tmp = float(x) * 0.1524
except :
# On efface le champ Francs et on affiche l'erreur
Francs.delete(0 , END)
Francs.insert(0, 'Saisie incorrecte')
winsound.Beep(frequency, duration)
tkinter.messagebox.showerror('Francs', '( ' + x +' )' + ' n\'est pas une somme correcte')
else :
# C'est bon alors on affiche le résultat
round = float("%0.2f" % tmp)
strround = str(round)
Euros.delete(0 , END)
Euros.insert(0, strround + ' €')
Francs.focus_set()
elif (y != "") and (x == ""):
# Vérification de la bonne saisie d'Euros
try :
tmp = float(y) * 6.5596
except :
# On efface le champ Euros et on affiche l'erreur
Euros.delete(0 , END)
Euros.insert(0, 'Saisie incorrecte')
winsound.Beep(frequency, duration)
tkinter.messagebox.showerror('Euros', '( ' + y +' )' + ' n\'est pas une somme correcte')
else :
# C'est bon alors on affiche le résultat
round = float("%0.2f" % tmp)
strround = str(round)
Francs.delete(0 , END)
Francs.insert(0, strround + ' F')
Euros.focus_set()
#*******************************************************************************
# Efface les deux champs de saisie et grise le bouton Effacer
def effacer():
# On efface les deux champs de saisie
Euros.delete(0 , END)
Francs.delete(0 , END)
# Le bouton Effacer est grisé
btn_effacer["state"] = "disabled"
# Le curseur clignote dans le champ Francs
Francs.focus_set()
root.title("Conversion actuelle Francs->Euros")
#*******************************************************************************

# Fenêtre principale
root = Tk()
root.geometry("650x150")

jouer_musique()

# Affichage d'un petit logo dans la fenêtre
img = ImageTk.PhotoImage(Image.open('h.gif'))
panel = Label(root, image = img)
panel.pack(side = LEFT, fill = 'both', expand = 'yes')
# Test de mise en couleur
#root.configure(bg='yellow')
#root.configure(bg='#00ffff')
# Place l'application au centre de l'écran
x = (root.winfo_screenwidth() - root.winfo_reqwidth()) / 2
y = (root.winfo_screenheight() - root.winfo_reqheight()) / 2
root.geometry("+%d+%d" % (x, y))
# Définition du titre de l'application au départ
root.title("Conversion actuelle Francs->Euros")
# Interdire l'agrandissement de la fenêtre
root.resizable(height = False, width = False)
root.event_delete
root.size()
# Bouton d'arrêt de la musique
btn_couperMusique = Button(root, text="Stop musique", fg ='blue', command = choix_musique, relief=RAISED)
btn_couperMusique.pack(side = BOTTOM)
#*******************************************************************************
# Bouton de switch de la conversion Francs->Euros ou Euros->Francs ainsi que son étiquette
mode = Label(root,text="Choix du mode ->")
mode.pack(side = LEFT)
btn_ch_mode = Button(root, text="Euros -> Francs", fg ='blue', command = switch_feef , relief = 'raised')
btn_ch_mode.pack(side = LEFT)
#*******************************************************************************
# Saisie du champ Francs
Label(root,text="Somme en Francs : ").pack()
Francs = Entry(root, width = 20)
Francs.pack()
#*******************************************************************************
# Saisie du champ Euros
Label(root,text="Somme en Euros : ").pack()
Euros = Entry(root, width = 20 )
Euros.pack()
#*******************************************************************************
# Le bouton Effacer est créé
btn_effacer = Button(root, text="Effacer", fg ='blue', command = effacer, relief=RAISED)
btn_effacer.pack(side = LEFT)
# Par défaut les deux champs de saisie sont vides et le bouton Effacer est grisé
btn_effacer["state"] = "disabled"
#*******************************************************************************
# Le bouton Quitter est créé
bouton2 = Button(root, text="Quitter", fg ='blue', command = root.destroy, relief=RAISED)
bouton2.pack(side = BOTTOM)
#*******************************************************************************
# Etiquette du mode d'emploi
Label(root,text="Enter pour calculer,Q ou Echap pour quitter").pack()
# Le curseur clignote dans le champ Francs
Francs.focus_set()
#*******************************************************************************
# Détection de la touche Enter, Echap ou Q
root.bind('<Return>', convert)
root.bind("<Escape>", exit)
root.bind("q", exit)

root.mainloop()
# Quand on quitte le programme, on arrête la musique et on dit au revoir
couper_musique()
jouer_aurevoir()
et je voudrais pouvoir le distribuer sous la forme d'un exécutable autonome Windows .
J'ai vu qu'il existe un utilitaire "py2exe" qui fait le travail mais je ne comprends rien à son
utilisation.
Est qu'il y a une âme charitable pour m'aider dans ma soif de connaissances ?
Merci

2 réponses

Messages postés
2082
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
7 septembre 2020
233
Salut,
j'ai testé CXFreeze pour ma part, ça fonctionne très simplement :
pip install cx-freeze
cxfreeze le-fichier.py

On obtiens un dossier dist qui contient l'exe et toutes les dépendances.
Messages postés
14
Date d'inscription
lundi 31 août 2020
Statut
Membre
Dernière intervention
18 septembre 2020

Bonsoir,
je te remercie de ton aide mais ça ne fonctionne pas chez moi avec mon script (message d'erreur trop long pour le poster ici).
Par contre j'ai trouvé pyinstaller qui fonctionne très bien:
pip install pyinstaller
pyinstaller nom_du_fichier.py

Avec aussi le même répertoire dist de ta description.
Baldo35