Python - Tkinter qui ne s'affiche en .exe

Résolu/Fermé
Courgettedemer Messages postés 7 Date d'inscription vendredi 1 octobre 2021 Statut Membre Dernière intervention 18 juin 2022 - 1 juin 2022 à 12:56
Courgettedemer Messages postés 7 Date d'inscription vendredi 1 octobre 2021 Statut Membre Dernière intervention 18 juin 2022 - 18 juin 2022 à 16:48
Bonjour,
J'ai un petit programme petit en tkinter. Je l'ai transformé en exécutable Windows avec pyinstaller, toutes les pages marchent sauf une où les éléments ne s'affichent pas comme ci-dessous.

Exécuté avec python dans le même dossier cela donne ça :

(la date utilise tkcalendar)

Auriez-vous une solution ?
Merci d'avance.

4 réponses

Courgettedemer Messages postés 7 Date d'inscription vendredi 1 octobre 2021 Statut Membre Dernière intervention 18 juin 2022
1 juin 2022 à 13:08
Après avoir exécuté mon programme avec une console derrière il me dit :
Exception in Tkinter callback
Traceback (most recent call last):
File "tkinter\__init__.py", line 1921, in __call__
File "Comptamille.py", line 259, in new
calendar = DateEntry(toplevel, width=16, bd=2, locale='fr_FR', state='readonly')
File "tkcalendar\dateentry.py", line 128, in __init__
File "tkcalendar\calendar_.py", line 258, in __init__
File "babel\dates.py", line 353, in get_day_names
File "babel\core.py", line 641, in days
File "babel\core.py", line 364, in _data
File "babel\localedata.py", line 141, in load
File "babel\localedata.py", line 141, in load
File "babel\localedata.py", line 147, in load
ModuleNotFoundError: No module named 'babel.numbers'


On a donc un nouveau problème.
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
1 juin 2022 à 13:42
Bonjour,

L'idéal serait que tu affiche ton code ici avec les balises de code
mode d'emploi:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Visuellement, ça doit ressembler à ça:

for k in range(10):
    print(k)
0
Courgettedemer Messages postés 7 Date d'inscription vendredi 1 octobre 2021 Statut Membre Dernière intervention 18 juin 2022
1 juin 2022 à 14:38
Pour ceux qui demandent la fenêtre à afficher est :
    def new(self):
        global userName, debt_dict, users_dict
        def testVal(inStr, acttyp):
            if inStr.replace('.', '', 1).isdigit() or inStr == '':
                if inStr.startswith('.'):
                    return False
                return True
            else:
                return False

        def dntwrt(sTr, acttyp):
            return False

        toplevel = Toplevel()
        toplevel.title('Comptamille - Nouveau')
        toplevel.geometry('300x300')
        toplevel.iconbitmap('Data\\Image\\icon.ico')
        toplevel.resizable(height=False, width=False)
        calendar = DateEntry(toplevel, width=16, bd=2, locale='fr_FR', state='readonly')
        calendar.place(anchor=CENTER, relx=1/4*3, relwidth=1/4*1.5, rely=1/6*2.5, height=20)
        calendar_l = Label(toplevel,  text='Date :', font=('', 12))
        calendar_l.place(anchor=CENTER, relx=1 / 4 * 3, relwidth=1 / 4 * 1.5, rely=1/6*2.17, height=12)
        amount = Entry(toplevel, bd=0, font=('', 8), validate="key", relief=SOLID, highlightthickness=1)
        amount.config(highlightbackground="#7A7A7A", highlightcolor="#7A7A7A")
        amount['validatecommand'] = (amount.register(testVal), '%P', '%d')
        amount.place(anchor=CENTER, relx=1 / 4 * 1, relwidth=1/4*1.5, rely=1/6*1.5, height=20)
        amount_l = Label(toplevel, text='Total :', font=('', 12))
        amount_l.place(anchor=CENTER, relx=1 / 4 * 1, relwidth=1 / 4 * 1.5, rely=1/6*1.17, height=12)
        users_list = []
        for i in users_dict:
            if i != userName:
                users_list.append(i)
        user_m = ttk.Combobox(toplevel, values=users_list)
        user_m.place(anchor=CENTER, relx=1 / 4 * 1, relwidth=1/4*1.5, rely=1/6*2.5, height=20)
        #user_m.current(0)
        user_l = Label(toplevel, text='Cible :', font=('', 12))
        user_l.place(anchor=CENTER, relx=1 / 4 * 1, relwidth=1 / 4 * 1.5, rely=1/6*2.17, height=12)
        type_m = ttk.Combobox(toplevel, values=['Crédit', 'Dettes'], state='readonly')
        type_m.place(anchor=CENTER, relx=1 / 4 * 3, relwidth=1 / 4 * 1.5, rely=1 / 6 * 1.5, height=20)
        type_m.current(0)
        type_l = Label(toplevel, text='Transaction :', font=('', 12))
        type_l.place(anchor=CENTER, relx=1 / 4 * 3, relwidth=1 / 4 * 1.5, rely=1 / 6 * 1.17, height=12)
        reason = Text(toplevel, bd=0, font=('', 8), relief=SOLID, highlightthickness=1)
        reason.config(highlightbackground="#7A7A7A", highlightcolor="#7A7A7A")
        reason.place(anchor=CENTER, relx=1 / 4 * 2, relwidth=1 / 4 * 3.5, rely=1 / 6 * 4.2, relheight=1/6*1.75)
        reason_l = Label(toplevel, text='Raison :', font=('', 12))
        reason_l.place(anchor=CENTER, relx=1 / 4 * 2, relwidth=1 / 4 * 1.5, rely=1 / 6 * 3.17, height=12)

        def ok():
            global userName
            g_amount = amount.get()
            g_user_m = user_m.get()
            g_reason = reason.get(1.0, "end-1c")
            g_calendar = calendar.get()
            g_type_m = type_m.get()
            if g_type_m == 'Dettes':
                g_type_m = '-'
            else: g_type_m = '+'
            debt_dict['Debts'][userName].append({'Total': f'{g_amount}', 'Creditor': f'{g_user_m}', 'Reason': f'{g_reason}', 'Date': f'{g_calendar}', 'Type': f'{g_type_m}'})
            self.editlist()
            toplevel.destroy()


        ok = Button(toplevel, text='OK', font=('', 12), command=ok)
        ok.place(anchor=CENTER, relx=1 / 4 * 2, relwidth=1 / 4 * 3.5, rely=1 / 6 * 5.5, height=20)
0
Courgettedemer Messages postés 7 Date d'inscription vendredi 1 octobre 2021 Statut Membre Dernière intervention 18 juin 2022
18 juin 2022 à 16:48
J'ai finalement trouvé ajoutez à votre code
from babel.dates import format_date, parse_date, get_day_names, get_month_names
from babel.numbers import * 
0