IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Comment visualiser qu'un label à le focus


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2013
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 91
    Par défaut Comment visualiser qu'un label à le focus
    Bonjour,
    Je souhaite synchroniser une liste contenant des nombres et une matrices de labels qui contiennent chacun un nombre de la liste.
    Entre les 2, un autre label affiche le nombre sélectionné soit par la liste, soit par la matrice de labels.
    Lorsque je suis dans la matrice, je veux visualiser le label qui a le focus.
    J'utilise pour cela widget.focus_set(), en initialisant les options highlightthickness et highlightcolor pour chaque label de la matrice.
    Je choisis un nombre par les labels, soit par un click gauche de la souris, soit grâce au flèche haut, bas, droite, gauche.
    Le programme fonctionne bien, sauf que je n'arrive pas à visualiser le label qui a le focus.
    Quelqu'un peut-il m'aider à trouver mon erreur?
    Voici mon programme:
    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
    145
    146
    147
    148
    import tkinter as tk
    nombres=list(range(12))
    global index
     
    '''
    La fenêtre principale comprend de gauche à droite:
    ---> Un label contenant une liste avec son ascenseur
         Chaque ligne de la liste contient un nombre
    ---> Un label affichant ce qui est selectionné par la liste ou par les labels
         contenus dans le labelFrame de droite
    ---> Des labels contenus dans un LabelFrame. Chaque label renferme un nombre
         présent dans la liste.
    Le but est de choisir un nombre soit en selectionnant une ligne de la liste,
    soit en selectionnant un label
    Le label qui contient le nombre selectionné devra être entouré d'un cadre noir
    '''
     
    def donneFocusC(evt):
        evt.widget.focus_set()
        num.set(lab.index(evt.widget))
        labelSelection["text"]=lab[num.get()]["text"]
        liste.selection_clear(0,tk.END)
        liste.selection_set(lab.index(evt.widget))
        liste.see(lab.index(evt.widget))
     
    def donneFocusH(evt):
        num.set((num.get()-1)%12)
        lab[num.get()].focus_set()
        labelSelection["text"]=lab[num.get()]["text"]
        liste.selection_clear(0,tk.END)
        liste.selection_set(lab[num.get()]["text"])
        liste.see(lab[num.get()]["text"])
     
    def donneFocusB(evt):
        num.set((num.get()+1)%12)
        lab[num.get()].focus_set()
        labelSelection["text"]=lab[num.get()]["text"]
        liste.selection_clear(0,tk.END)
        liste.selection_set(lab[num.get()]["text"])
        liste.see(lab[num.get()]["text"])
     
    def donneFocusD(evt):
        num.set((num.get()+3)%12)
        lab[num.get()].focus_set()
        labelSelection["text"]=lab[num.get()]["text"]
        liste.selection_clear(0,tk.END)
        liste.selection_set(lab[num.get()]["text"])
        liste.see(lab[num.get()]["text"])
     
    def donneFocusG(evt):
        num.set((num.get()-3)%12)
        lab[num.get()].focus_set()
        labelSelection["text"]=lab[num.get()]["text"]
        liste.selection_clear(0,tk.END)
        liste.selection_set(lab[num.get()]["text"])
        liste.see(lab[num.get()]["text"])
     
    def donneFocusLFlabels(evt):
        labelLabels.focus_set()
        lab[num.get()].focus_set()
        labelSelection["fg"]="red"
     
    def donneFocusLFliste(evt):
        labelListe.focus_set()
        liste.focus_set()
        liste.activate(num.get())
        labelSelection["fg"]="blue"
     
    def ParcourirListe():
        global p
        num.set(liste.curselection()[0])
        labelSelection["textvariable"]=str(num)
        p=labelSelection.after(200,ParcourirListe)
     
     
    def NePlusParcourirListe():
        global p
        labelSelection.after_cancel(p)
     
    #Création de la fenêtre principale
    ##################################
    fenetrePrincipale=tk.Tk()
    fenetrePrincipale.title("Un essai sur la gestion du focus")
    fenetrePrincipale.grid()
    num=tk.IntVar()
     
    #Création du label contenant la liste et l'ascenseur
    ####################################################
    labelListe=tk.LabelFrame(fenetrePrincipale,text="Contient une liste",bg="gray90",fg='black',
                             highlightcolor="blue",highlightthickness=2,takefocus=1)
    labelListe.bind("<Enter>",donneFocusLFliste)
    labelListe.grid(row=0,column=0,sticky="ns")
    labelListe.grid()
     
    #   Création de la liste
    liste=tk.Listbox(labelListe,height=5,width=10)
    liste.grid(row=0,column=0,sticky="ns")
    for i in nombres:
        liste.insert(tk.END,str(i))
    liste.selection_set(0)
    num.set(liste.curselection()[0])
    #   Création de l'ascenseur
    ascenseur=tk.Scrollbar(labelListe)
    ascenseur.grid(row=0,column=1,sticky="ns")
    #   Mise en relation de la liste et de l'ascenseur
    liste["yscrollcommand"]=ascenseur.set
    ascenseur["command"]=liste.yview
     
    liste.bind("<Enter>",lambda evt: ParcourirListe())
    liste.bind("<Leave>",lambda evt: NePlusParcourirListe())
     
    #Création du LabelFrame afficheur
    #################################
    labelAfficheur=tk.LabelFrame(fenetrePrincipale,text="Selection",bg="Misty rose")
    labelAfficheur.grid(row=0,column=1,sticky="ns")
    labelAfficheur.grid()
    #    Création du Label qui affiche le nombre selectionné
    labelSelection=tk.Label(labelAfficheur,width=10,textvariable=str(num),height=6,justify="center")
    labelSelection.grid(row=0,column=0)
     
    #Création du LabelFrame contenant les labels
    ############################################
    labelLabels=tk.LabelFrame(fenetrePrincipale,text="Contient des labels",
                              highlightcolor="red",highlightthickness=1,takefocus=1)
    labelLabels.grid(row=0,column=2,sticky="ns",)
    labelLabels.grid()
    labelLabels.bind("<Enter>",donneFocusLFlabels)
    #    Création de tous les labels contenant un nombre
    ligne=0
    colonne=0
    lab=list()
    i=0
    for j in nombres:
        lab.append(tk.Label(labelLabels,text=str(j),takefocus=1,highlightthickness=1,
                            highlightcolor ="red",bg="Gray50",width=3,height=1))
        lab[j].bind("<Button-1>",donneFocusC) #focus géré par un click gauche
        lab[j].bind("<Up>",donneFocusH) # focus géré par flèche haut
        lab[j].bind("<Down>",donneFocusB) # focus géré par flèche bas
        lab[j].bind("<Right>",donneFocusD) # focus géré par flèche droite
        lab[j].bind("<Left>",donneFocusG) # focus géré par flèche gauche
        lab[j].grid(row=ligne,column=colonne)
        j+=1
        ligne+=1
        if ligne>2:
            ligne=0
            colonne+=1
     
    fenetrePrincipale.mainloop()

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Je ne suis jamais arrivé à faire fonctionner çà sous Windows (et je n'ai pas essayé sous Linux): je change le background pour signaler la navigation "à la main".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    Après avoir cliqué sur un chiffre de la liste et en survolant la partie label avec la souris , je vois bien le focus.
    Idem en partant du label ...
    (je suis sous linux)

  4. #4
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2013
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 91
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Bonjour,
    Après avoir cliqué sur un chiffre de la liste et en survolant la partie label avec la souris , je vois bien le focus.
    Idem en partant du label ...
    (je suis sous linux)
    Je suis sous windows 10
    J'ai commencé à travailler sur ce programme sur un apple, et je voyais le focus de manière aléatoire (du certainement à un manque de mise au point)
    Ce serait donc un problème windows?
    Y at il un moyen de contourner le problème, je voudrais que le focus soit indiqué par un cadre de couleur?

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par Cemalatowilo Voir le message
    Y at il un moyen de contourner le problème, je voudrais que le focus soit indiqué par un cadre de couleur?
    Ne vous ai je pas suggéré de changer le background "à la main"?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2013
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 91
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Ne vous ai je pas suggéré de changer le background "à la main"?

    - W
    Exact, mais ce programme est une maquette pour visualiser des couleurs par le background des labels, alors que la liste indiquera le nom de la couleur.
    Donc l'utilisation du background ne me convient pas. J'ai essayé d'utiliser l'option relief. Cela fonctionne mais je crains que ce ne soit pas assez visible.
    J'ai vu également que je peux utiliser l'option borderwidth pour modifier l'épaisseur de la bordure du label.
    Savez vous s'il est possible de modifier la couleur de de cette bordure?

Discussions similaires

  1. [RAVE] Comment visualiser un texte enrichi ?
    Par ARDILLER dans le forum Composants VCL
    Réponses: 4
    Dernier message: 14/03/2006, 15h54
  2. Réponses: 7
    Dernier message: 22/02/2006, 17h07
  3. Comment savoir quelle fenêtre possède le focus ?
    Par WebPac dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 22/12/2005, 09h59
  4. [SWiSHMax] Comment visualiser un preloader en local
    Par 3psilOn dans le forum Flash
    Réponses: 1
    Dernier message: 22/07/2005, 15h43
  5. [Label] Comment faire clignoter un label ?
    Par delphicrous dans le forum Composants VCL
    Réponses: 7
    Dernier message: 09/07/2004, 16h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo