Bonsoir à tous,
Je refais mon appli de gestion de mon cabinet sous Python.
Je crains de poser ici une question basique, mais je n'arrive pas à comprendre ce qui ne fonctionne pas dans le code.

J'ai une fiche pour chaque personne venant consulter, et quand je passe d'un dossier à l'autre, je souhaiterais que s'affiche la première page de la boîte à onglets où figurent mes infos.
Je mets un code ci-dessous, tiré de ce que je fais dans mon code complet. En ligne 53-55, manifestement l'instruction focus_set() est tout à fait ineffective, le focus restant sur le dernier bouton pressé. Quelle ânerie ai-je commise ? Je souhaiterais que, si je suis sur un autre onglet que le 1, et sur changement de dossier (un des quatre boutons en bas à gauche), on revienne sur l'onglet 1 après affichage du nouveau dossier.

Merci pour votre aide, et désolé pour cette question tellement basique, mais je coince.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
 
import tkinter as tk
from tkinter import ttk
 
# Base de dossiers et indice de balayage de la table (part de 0)
# Nom, Prénom, Date de naissance, Type
listeDossiers=[("DUCK","Donald","1934-06-09","M","Canard"),("MOUSE","Mickey","1928-11-18","M","Souris"),("GOOFY","Dingo","1932-05-25","M","Chien"),("COW","Clarabelle","1929-06-28","M","Vache"),("MOUSE","Miss Kitty","1986-07-02","F","Souris"),("DUCK","Daisy","1937-01-09","F","Canard")]
 
def presentationDate(dateAPresenter):
    """
    Parameters
    ----------
    dateAPresenter : TYPE date en format aaaa-mm-jj
        DESCRIPTION.
 
    Returns
    -------
    la date en format jj/mm/aaaa
 
    """
    if len(dateAPresenter)==10:
        return dateAPresenter[-2:]+"/"+dateAPresenter[5:7]+"/"+dateAPresenter[0:4]    
 
def btn_PremierDossier():
    # On met l'indice de dossier affiché au début
    idPersoCourant.set("0")
    affichagePersoCourant()
def btn_DossierPrecedent():
    # On décrémente l'indice de dossier affiché, sauf si déjà sur premier enregistrement
    if int(idPersoCourant.get())>0:
        idPersoCourant.set(str(int(idPersoCourant.get())-1))
    affichagePersoCourant()
def btn_btn_DossierSuivant():
    # On incrémente l'indice de dossier affiché, sauf si déjà sur dernier enregistrement
    if int(idPersoCourant.get())<len(listeDossiers)-1:
        idPersoCourant.set(str(int(idPersoCourant.get())+1))
    affichagePersoCourant()
 
def btn_DernierDossier():
    # On met l'indice de dossier affiché à la fin   
    idPersoCourant.set(str(len(listeDossiers)-1))
    affichagePersoCourant()
 
def affichagePersoCourant():
    # On remplit les Stringvar avec les valeurs correspondantes
    refPersoCourant=listeDossiers[int(idPersoCourant.get())] 
    NomPerso.set(refPersoCourant[0])
    PrenomPerso.set(refPersoCourant[1])
    SexePerso.set(refPersoCourant[3])
    DtNPerso.set(presentationDate(refPersoCourant[2]))
    TypePerso.set(refPersoCourant[4])
 
    # On revient au premier onglet de la boîte
    #chNomPerso.focus_set()
    Onglet1.focus_set()
 
# Ouverture de la fenêtre de base
FenetreBC_root = tk.Tk()
FenetreBC_root.geometry('1280x777')
FenetreBC_root.title('Cabinet de Phoniatrie Bruno')
 
# Entrée de mémorisation du personnage en cours d'affichage
idPersoCourant=tk.StringVar()
idPersoCourant_ent=ttk.Entry(FenetreBC_root,textvariable=idPersoCourant)
idPersoCourant_ent.place(x=0,y=0,width=0,height=0)
idPersoCourant.set("0")
 
 
FenetreGestion_DossiersP = ttk.Frame(FenetreBC_root)
FenetreGestion_DossiersP.place(x = 0, y = 0, width = 1280, height = 877)
 
# Ecriture des boutons
# bouton Premier dossier
btn_PremierDossier = ttk.Button(FenetreGestion_DossiersP, text="Prem", command=btn_PremierDossier)
btn_PremierDossier.place(x = 50, y = 600, width = 50, height = 50)
# bouton Dossier précédent
btn_DossierPrecedent = ttk.Button(FenetreGestion_DossiersP, text="Préc", command=btn_DossierPrecedent)
btn_DossierPrecedent.place(x = 100, y = 600, width = 50, height = 50)
# bouton Recherche dossier
# bouton Dossier suivant
btn_DossierSuivant = ttk.Button(FenetreGestion_DossiersP, text="Suiv", command=btn_btn_DossierSuivant)
btn_DossierSuivant.place(x = 250, y = 600, width = 50, height = 50)
# bouton Dernier dossier
btn_DernierDossier = ttk.Button(FenetreGestion_DossiersP, text="Dern", command=btn_DernierDossier)
btn_DernierDossier.place(x = 300, y = 600, width = 50, height = 50)
 
# bouton Quitter
btn_Quitter = ttk.Button(FenetreGestion_DossiersP, text="Quitter", command=FenetreBC_root.destroy)
btn_Quitter.place(x = 750, y = 600, width = 100, height = 50)
 
# Construction Table à onglets
OngletAffichageBase = ttk.Notebook(FenetreGestion_DossiersP)
OngletAffichageBase.place(x = 50, y = 100, width = 800, height = 500)
Onglet1 = ttk.Frame(OngletAffichageBase)
Onglet1.place(x = 0, y = 0, width = 795, height = 495)
OngletAffichageBase.add(Onglet1, text = "Etat-civil")
Onglet2 = ttk.Frame(OngletAffichageBase)
Onglet2.place(x = 0, y = 0, width = 795, height = 495)
OngletAffichageBase.add(Onglet2, text = "Diagnostic et correspondants")
Onglet3 = ttk.Frame(OngletAffichageBase)
Onglet3.place(x = 0, y = 0, width = 795, height = 495)
OngletAffichageBase.add(Onglet3, text = "Actes")
Onglet4 = ttk.Frame(OngletAffichageBase)
Onglet4.place(x = 0, y = 0, width = 795, height = 495)
OngletAffichageBase.add(Onglet4, text = "Courriers")
Onglet5 = ttk.Frame(OngletAffichageBase)
Onglet5.place(x = 0, y = 0, width = 795, height = 495)
OngletAffichageBase.add(Onglet5, text = "Photos")
 
# Définition des StringVar
NomPerso= tk.StringVar()
PrenomPerso= tk.StringVar()
SexePerso= tk.StringVar()
TypePerso= tk.StringVar()
DtNPerso= tk.StringVar()
 
# Définition des widgets
# Onglet1
etNomPerso=ttk.Label(Onglet1,text="Nom")
etNomPerso.place(x=30,y=60,width=80,height=22)
etPrenomPerso=ttk.Label(Onglet1,text="Prénom")
etPrenomPerso.place(x=380,y=60,width=60,height=22)
chNomPerso=ttk.Entry(Onglet1,textvariable=NomPerso)
chNomPerso.place(x=140,y=60,width=230,height=22)
chPrenomPerso=ttk.Entry(Onglet1,textvariable=PrenomPerso)
chPrenomPerso.place(x=450,y=60,width=200,height=22)
etSexePerso=ttk.Label(Onglet1,text="Sexe")
etSexePerso.place(x=660,y=60,width=40,height=22)
chSexePerso=ttk.Entry(Onglet1,textvariable=SexePerso)
chSexePerso.place(x=700,y=60,width=20,height=22)
etDtNPerso=ttk.Label(Onglet1,text="Date de naissance")
etDtNPerso.place(x=30,y=110,width=110,height=22)
chDtNPerso=ttk.Entry(Onglet1,textvariable=DtNPerso)
chDtNPerso.place(x=140,y=110,width=100,height=22)
# Onglet2 - Juste pour changer d'onglet pour la démo
etTypePerso=ttk.Label(Onglet2,text="Type de personnage")
etTypePerso.place(x=30,y=60,width=120,height=22)
chTypePerso=ttk.Entry(Onglet2,textvariable=TypePerso)
chTypePerso.place(x=160,y=60,width=100,height=22)
 
# Premier affichage de perso avant lancement de la boucle
affichagePersoCourant()
 
FenetreBC_root.mainloop()