Script python qui ne reste pas à l'écran

Signaler
Messages postés
14
Date d'inscription
lundi 31 août 2020
Statut
Membre
Dernière intervention
18 septembre 2020
-
Messages postés
369
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
24 septembre 2020
-
Bonjour,
j'ai écrit un petit script en python qui fait la conversion Francs Euros.
Il fonctionne bien avec l'interface PyScripter mais quand je le lance avec l'Explorateur de fichiers de Windows 10 à l'écran je n'ai brièvement qu'une fenêtre DOS.
Windows 10
Python 3.8.3
PyScripter 3.6.3.0 32 bits
Est-ce que quelqu'un peut m'aider ?
Merci
#-------------------------------------------------------------------------------
# Name:        FrancsEuro.py
# Purpose:
#
# Author:
#
# Created:     25/08/2020
# Copyright:   (c)  2020
# Licence:     <your licence>
#-------------------------------------------------------------------------------

def main():
    pass
if __name__ == '__main__':
    main()
from tkinter import *

# Fonction de destruction de la fenêtre principale
def exit(event):
    root.destroy()

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 Francs<->Euros")
        Francs.focus_set()
    else:
        btn_ch_mode["text"] = "Francs -> Euros"
        Euros.focus_set()
        root.title("Conversion Euros<->Francs")

def convert(event):
        # Si Francs et Euros sont remplis ont les effaces
        if ((Francs.get() != "") and (Euros.get() != "")):
            effacer()
        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')
            else :
                # C'est bon alors on affiche le résultat
                round = float("%0.5f" % tmp)
                strround = str(round)
                Euros.delete(0 , END)
                Euros.insert(0, strround + ' €')
        if (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')
            else :
                # C'est bon alors on affiche le résultat
                round = float("%0.5f" % tmp)
                strround = str(round)
                Francs.delete(0 , END)
                Francs.insert(0, strround + ' F')
# 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 Francs<->Euros")
root = Tk()
# Place l'application au centre de l'écran
root.eval('tk::PlaceWindow %s center' % root.winfo_pathname(root.winfo_id()))
root.title("Conversion Francs<->Euros")
root.geometry("450x135")
# 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)
btn_ch_mode.pack(side = LEFT)
# Interdire l'agrandissement de la fenêtre
root.resizable(height = False, width = False)
root.size()
Label(root,text="Somme en Francs : ").pack()
# Saisie du champ Francs
Francs = Entry(root)
Francs.pack()
Label(root,text="Somme en euros : ").pack()
# Saisie du champ Euros
Euros = Entry(root)
Euros.pack()
# Le bouton Effacer est créé
btn_effacer = Button(root, text="Effacer", fg ='blue', command = effacer)
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)
bouton2.pack(side = RIGHT)
# Etiquette du mode d'emploi
Label(root,text="Entrez une somme en Francs \nou en Euros puis Enter\nQ 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()

3 réponses

Messages postés
369
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
24 septembre 2020
58
Bonjour Baldo35,

Ah bon ???

Moi j'ai copié/collé ton code dans un fichier test.pyw, et lorsque je double-clique dessus dans l'explorateur, (windows 10) j'obtiens ceci:



Ceci ne sert à rien:

def main():
    pass
if __name__ == '__main__':
    main()
Messages postés
14
Date d'inscription
lundi 31 août 2020
Statut
Membre
Dernière intervention
18 septembre 2020

Ok bonjour Phil_1857,
merci de ton effort.
En fait je pense que j'ai un problème de version de Python ( 3.8.3 et 3.9 sur ma machine), le py.exe de la 3.9 n'accepte pas :
root.eval('tk::PlaceWindow %s center' % root.winfo_pathname(root.winfo_id()))

alors que la 3.8.3 ne pose pas de problème.
Quant à l'entête de mon script qui ne sert à rien, je prends bonne note.
Messages postés
369
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
24 septembre 2020
58
Python 3.7.2 l'accepte, apparemment .... mais sur mon PC, la fenêtre ne se crée pas au centre de l'écran, mais un peu sur la droite

Sinon, moi, j'écris ça comme ceci (après tout, pourquoi vouloir absolument la fenêtre en plein centre ?) :

root.geometry("450x135+200+200")


+200+200 étant la position à partir du coin haut/gauche de l'écran

Ou alors essaie le nouveau formatage:
root.eval('tk::PlaceWindow {} center'.format(root.winfo_pathname(root.winfo_id())))



Pour la partie qui ne sert à rien, __name__ est égal à __main__, donc on appelle la fonction main qui ne fait rien du tout :-)