Python - Tkinter qui ne s'affiche en .exe

Résolu
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

  1. 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.
    1. 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)
      
      1. 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 *