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 :

Se positionner à la fin d'un treeview [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2012
    Messages
    321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2012
    Messages : 321
    Points : 604
    Points
    604
    Par défaut Se positionner à la fin d'un treeview
    Bonjour à tous. J'ai effectué pas mal de recherches, et je bloque sur un point, impossible après mise a jour du contenu du treeview de se positionner automatiquement sur la dernière ligne.

    J'ai un widget treeview qui est alimenté par une base MySQL.

    La fenêtre est de taille fixe et ne doit pas être redimensionnable.

    Après la mise à jour du treeview, je souhaiterai que l'affichage du treeview soit positionné sur la dernière ligne.

    Le treeview est associé à un scrollbarr vertical qui fonctionne parfaitement, mais ce qui fonctionnait pour un textbox (textbox.see(END)) ne fonctionne pas, et je n'ai pas réussi, ou alors pas compris comment elles fonctionnaient à utiliser les methodes yview(integer) (essayé et pas de positionnement) ou bien _scroll.

    Quelqu'un aurait-il une idée ?

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par killian68 Voir le message
    Après la mise à jour du treeview, je souhaiterai que l'affichage du treeview soit positionné sur la dernière ligne.

    Le treeview est associé à un scrollbarr vertical qui fonctionne parfaitement, mais ce qui fonctionnait pour un textbox (textbox.see(END)) ne fonctionne pas, et je n'ai pas réussi, ou alors pas compris comment elles fonctionnaient à utiliser les methodes yview(integer) (essayé et pas de positionnement) ou bien _scroll.
    tree.see(item) fonctionne avec un entier (l'identifiant retourné par l'insert) ou un tag (à préciser).
    Pour le reste, faut voir comment vous avez codé çà.

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

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2012
    Messages
    321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2012
    Messages : 321
    Points : 604
    Points
    604
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    tree.see(item) fonctionne avec un entier (l'identifiant retourné par l'insert) ou un tag (à préciser).
    Pour le reste, faut voir comment vous avez codé çà.

    - W
    Le treeview est créé de la façon suivante
    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
     
    #construction du treeview
    lstalarme = Treeview(fen1,selectmode='browse')
    lstalarme['columns'] = ('User', 'Message')
    lstalarme.heading('#0',text='Heure', anchor='w')
    lstalarme.column('#0',anchor='w')
    lstalarme.heading('User', text='User')
    lstalarme.column('User', anchor='w', width=100)
    lstalarme.column('User', stretch=tkinter.YES)
    lstalarme.heading('Message', text='Message')
    lstalarme.column('Message', anchor='w', width=668)
    lstalarme.grid(sticky=(N,S,W,E)) 
    lstalarme.grid_rowconfigure(0, weight = 1)
    lstalarme.grid_columnconfigure(0, weight = 1)
    yscrollbar=Scrollbar(fen1,command=lstalarme.yview)
    yscrollbar.grid(row=0,column=1,sticky=(N,S))
    lstalarme['yscrollcommand'] = yscrollbar.set
     
    #requete SQL
    requete="SELECT date, long_desc, emet, dest FROM message WHERE dest='Tous' OR dest='"+usr+"' OR emet='"+usr+"';"
    db=pymysql.connect(host,user,password,database)
    query=db.cursor()
    query.execute(requete)
    db.close
     
    for j in querry:
            lstalarme.insert('','end', text=j[0],values=(j[2],j[1]))
    Le treeview lstalarme se construit parfaitement, mon seul soucis, est d'afficher la dernière entrée. La fin de liste doit être visible dans le widget une fois la requête et l'alimentation du widget terminée.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par killian68 Voir le message
    Le treeview lstalarme se construit parfaitement, mon seul soucis, est d'afficher la dernière entrée. La fin de liste doit être visible dans le widget une fois la requête et l'alimentation du widget terminée.
    Comme je ne vois pas d'appel à .see dans votre code, effectivement çà ne peut pas marcher.

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

  5. #5
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2012
    Messages
    321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2012
    Messages : 321
    Points : 604
    Points
    604
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Comme je ne vois pas d'appel à .see dans votre code, effectivement çà ne peut pas marcher.

    - W
    En effet, ne fonctionnant pas, j'ai retiré l'appel. J'ai essayé ceci
    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
     
     
    #construction du treeview
    lstalarme = Treeview(fen1,selectmode='browse')
    lstalarme['columns'] = ('User', 'Message')
    lstalarme.heading('#0',text='Heure', anchor='w')
    lstalarme.column('#0',anchor='w')
    lstalarme.heading('User', text='User')
    lstalarme.column('User', anchor='w', width=100)
    lstalarme.column('User', stretch=tkinter.YES)
    lstalarme.heading('Message', text='Message')
    lstalarme.column('Message', anchor='w', width=668)
    lstalarme.grid(sticky=(N,S,W,E)) 
    lstalarme.grid_rowconfigure(0, weight = 1)
    lstalarme.grid_columnconfigure(0, weight = 1)
    yscrollbar=Scrollbar(fen1,command=lstalarme.yview)
    yscrollbar.grid(row=0,column=1,sticky=(N,S))
    lstalarme['yscrollcommand'] = yscrollbar.set
     
    #requete SQL
    requete="SELECT date, long_desc, emet, dest FROM message WHERE dest='Tous' OR dest='"+usr+"' OR emet='"+usr+"';"
    db=pymysql.connect(host,user,password,database)
    query=db.cursor()
    query.execute(requete)
    db.close
     
    for j in querry:
            lstalarme.insert('','end', text=j[0],values=(j[2],j[1]))
            lstalarme.see(j[0])
    Seule la première entrée de la base est alors insérée dans le treeview et l'erreur suivante apparait : _tkinter.TclError: Item 16/04/2016 14:34 not found

    j[0] contient l'horodatage d'une alarme, ceci est la 1ere entrée de la base

    placé hors de la boucle, lstalarme.see(j[0]), le widget se construit bien mais un message d'erreur est généré, _tkinter.TclError: Item 22/04/2016 19:20 not found

    Cette fois-ci, très logiquement, c'est le dernier horodatage qui apparait dans le msg d'erreur.

    Dans les deux cas, aucun positionnement du widget en fin de liste.

    Je sèche vraiment du coup

  6. #6
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Forcément, tu lui donnes une date en identifiant

    .insert(parent, index, iid=None, **kw)
    This method adds a new item to the tree, and returns the item's iid value.

    iid You may supply an iid for the item as a string value. If you don't supply an iid, one will
    be generated automatically and returned by the method.

    .see(iid)
    This method ensures that the item specified by iid is visible. Any of its ancestors that are closed
    are opened. The widget is scrolled, if necessary, so that the item appears.
    Le temps ronge l'amour comme l'acide.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Comme je l'ai déjà écrit précédemment (et que vous devriez trouvé dans votre documentation ttk), l'identifiant de l'item, c'est pas n'importe quoi: c'est l'objet retourné par .insert. Codé dégueu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for j in querry:
            item = lstalarme.insert('','end', text=j[0],values=(j[2],j[1]))
            lstalarme.see(item)
    devrait fonctionner.

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

  8. #8
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2012
    Messages
    321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2012
    Messages : 321
    Points : 604
    Points
    604
    Par défaut
    Magnifique, je vais approfondir tout cela.

    En tout cas cela fonctionne parfaitement.

    Un grand merci en tout cas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Se positionner à la fin d'une ListView
    Par TsCyrille dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 07/10/2010, 10h11
  2. Réponses: 3
    Dernier message: 19/11/2008, 21h41
  3. [TMemo] Comment se positionner à la fin ?
    Par delphidebutant dans le forum Débuter
    Réponses: 7
    Dernier message: 01/05/2008, 17h44
  4. Se positionner à la fin d'un formulaire
    Par gbzmt dans le forum VBA Access
    Réponses: 0
    Dernier message: 26/02/2008, 20h34
  5. Réponses: 3
    Dernier message: 17/03/2007, 14h59

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