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

Python Discussion :

scrollbar suit la dernière ligne


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 67
    Par défaut scrollbar suit la dernière ligne
    bonjour,

    j'ai mon frame qui contient combo label et bouton dans canvas avec scrollbar
    achaque fois que j'appuis sur le bouton la ligne suivante s'affiche alors ce que je souhaite c'est que arrivé à la taille du canvas le scrollbar prend toujour la position la plus basse cad le scrollabr suit la dernière ligne ajouter
    voici mon code
    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
    from tkinter import *
     
    from tkinter import ttk
     
    Fenetre_Creation_Facture=Tk()
    Fenetre_Creation_Facture.geometry("1100x700")
    Fenetre_Creation_Facture.configure(bg = "turquoise1")
     
     
    LabelFrameLignesFacture=LabelFrame(Fenetre_Creation_Facture, text="LIGNES FACTURE",bg='yellow')
     
     
    FrameLignesFacture = Frame(LabelFrameLignesFacture,bg='red')
    Canvas_LignesFacture = Canvas(FrameLignesFacture)
    Canvas_LignesFacture.pack(side="left", fill="both", expand=True)
     
    Scrollable_Frame = Frame(Canvas_LignesFacture)
     
    Scrollbar =ttk.Scrollbar(FrameLignesFacture, orient="vertical", command=Canvas_LignesFacture.yview)
    Scrollbar.pack(side="right", fill="y")
     
     
    Scrollable_Frame.bind(
                           "<Configure>",
                           lambda e: Canvas_LignesFacture.configure(
                           scrollregion=Canvas_LignesFacture.bbox("all")
                           )
                       )
     
    Canvas_LignesFacture.create_window((0, 0), window=Scrollable_Frame, anchor="nw")
     
    Canvas_LignesFacture.configure(yscrollcommand=Scrollbar.set)
     
    ListeLignesFacture=[]
     
    def Ajouter_Ligne(Event, NumBouton):
     
     
                       if NumBouton<49:
     
     
                          #ListeLignesFacture[NumBouton+1]["Frame_Ligne"].configure(height=(30*NumBouton+2))
                          if NumBouton<9:
                             FrameLignesFacture.place_forget()
                             FrameLignesFacture.place(x=10,y=45, height=(30*(NumBouton+2)), width=515)
     
                          ListeLignesFacture[NumBouton+1]["Frame_Ligne"].grid(row=NumBouton+1,column=1)
                          ListeLignesFacture[NumBouton+1]["ChoixEncaissement"].place(x=10,y=5, height=20, width=380)
                          ListeLignesFacture[NumBouton+1]["Text_Montant"].place(x=395,y=5, height=20, width=70)
                          ListeLignesFacture[NumBouton+1]["Bouton+"].place(x=470,y=5, height=20, width=20)
     
     
     
    for i in range(50):
     
     
     
                    FrameLigne=Frame(Scrollable_Frame,bg='yellow',height=30, width=500)
     
                    Nom="encaissement"+str(i)
                    Choix_Encaissement = StringVar()
                    ChoixEncaissement = ttk.Combobox(FrameLigne, state = 'readonly',height=20, width=50,values='-----------CHOIX----------',name=Nom,textvariable = Choix_Encaissement)
                    ChoixEncaissement.current(0)
                    TextMontant=Label(FrameLigne,text="",height=1, width=10,bg='red',anchor="w")
     
                    Bouton=Button(FrameLigne, font=("Purisa", 17),text = "+",bg="green",name="bouton"+str(i))
     
                    def IdentifierBouton(Event, i=i):
                        return Ajouter_Ligne(Event, i)
     
                    Bouton.bind('<Button-1>', IdentifierBouton)
                    ListeLignesFacture.append({"Frame_Ligne":FrameLigne,"Choix_Encaissement":Choix_Encaissement,"ChoixEncaissement":ChoixEncaissement,"Text_Montant":TextMontant,"Bouton+":Bouton})
     
     
     
    LabelFrameLignesFacture.place(x=10,y=320, height=370, width=730)
     
    FrameLignesFacture.place(x=10,y=45, height=30, width=515)
     
    ListeLignesFacture[0]["Frame_Ligne"].grid(row=0,column=1)
     
    ListeLignesFacture[0]["ChoixEncaissement"].place(x=10,y=5, height=20, width=380)
    ListeLignesFacture[0]["Text_Montant"].place(x=395,y=5, height=20, width=70)
    ListeLignesFacture[0]["Bouton+"].place(x=470,y=5, height=20, width=20)
     
     
    Fenetre_Creation_Facture.mainloop()
    merci d'avance

  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,

    Commencez par faire un petit bouillon de ce que vous voulez faire (plutôt que de poster tout le code) pour vous concentrez sur les widgets qui comptent dans cette interaction.

    Après pour la question, si vous ajoutez des "lignes", pour que la dernière ligne ajoutée soit visible, il va falloir "scroller" le contenu du Canvas.

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

  3. #3
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 67
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Après pour la question, si vous ajoutez des "lignes", pour que la dernière ligne ajoutée soit visible, il va falloir "scroller" le contenu du Canvas.

    - W
    désolé je ne vois pas trop ce que vous dites

  4. #4
    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 THCH66 Voir le message
    désolé je ne vois pas trop ce que vous dites
    Ca ne m'étonne pas puisque vous n'avez pas écrit le petit brouillon qui se focalise sur ce scenario.

    N'oubliez pas non plus que pour afficher un tableau "scrollable" vous avez le widget ttk.Treeview qui à une méthode see.

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

  5. #5
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 67
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Ca ne m'étonne pas puisque vous n'avez pas écrit le petit brouillon qui se focalise sur ce scenario.

    - W
    Merci wiztricks pour vos réactions , j'avoue que sur ce coup je n'arrive pas à te suivre
    1)vous parlez de petit brouillon le code que j'ai posté c'est un petit code qui affiche des lignes dans un canvas et je souhaite que le scrollbar suit toujours la dernière ligne ajouté

    2)cette histoire de treeview je ne voie pas comment l'utiliser dans mon code tout en gardant le même principe

    Nb:je suis à un stade débutant avec python et j'ai du mal à trouvé une documentation complète

  6. #6
    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 THCH66 Voir le message
    Nb:je suis à un stade débutant avec python et j'ai du mal à trouvé une documentation complète
    Si vous ouvrez le forum tkinter, vous y trouverez 3 discussions importantes dont une collecte les tutos/documentations trouvées sur tkinter.

    La vraie documentation est celle de TCL/Tk et est un peu ardue car très technique (un mot est un mot et on ne tourne pas autour du pot).

    La communauté TCL/Tk a créé un site où vous trouvez un tour de l'ensemble des widgets pour donner une idée de ce qu'on peut faire avec et des exemples de code dans différents langages.

    Citation Envoyé par THCH66 Voir le message
    )vous parlez de petit brouillon le code que j'ai posté c'est un petit code qui affiche des lignes dans un canvas et je souhaite que le scrollbar suit toujours la dernière ligne ajouté
    çà c'est l'histoire de ce que vous voulez. Mais en fait, en étant un peu un peu attentif à ce qu'il se passe le Canvas a une dimension fixe.

    A l'intérieur, on a une Frame qui grossit au fur et à mesure qu'on y ajoute des widgets.

    Au bout d'un moment, ses dimensions débordent la taille de la fenêtre du Canvas.

    Plutôt que de toujours voir le début de la Frame, vous voudriez que çà affiche la fin (où les derniers éléments ont été ajoutés).
    Et, accessoirement que l'ascenseur de la Scrollbar (qui n'a aucun intérêt ici) soit "à jour".

    Si je raconte çà, de suite on a 3 widgets: le Canvas et la Frame qu'il contient et un Button qui permet d'ajouter des widgets à la frame histoire qu'elle grossisse.
    Et pour le coup, vous avez levé le nez de votre début d'application pour réfléchir à comment réaliser ce genre d'interaction avec tkinter.

    - W



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

  7. #7
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 67
    Par défaut
    Citation Envoyé par wiztricks Voir le message

    Mais en fait, en étant un peu un peu attentif à ce qu'il se passe le Canvas a une dimension fixe.

    A l'intérieur, on a une Frame qui grossit au fur et à mesure qu'on y ajoute des widgets.

    Au bout d'un moment, ses dimensions débordent la taille de la fenêtre du Canvas.

    Plutôt que de toujours voir le début de la Frame, vous voudriez que çà affiche la fin (où les derniers éléments ont été ajoutés).
    Et, accessoirement que l'ascenseur de la Scrollbar (qui n'a aucun intérêt ici) soit "à jour".

    Si je raconte çà, de suite on a 3 widgets: le Canvas et la Frame qu'il contient et un Button qui permet d'ajouter des widgets à la frame histoire qu'elle grossisse.
    Et pour le coup, vous avez levé le nez de votre début d'application pour réfléchir à comment réaliser ce genre d'interaction avec tkinter.

    - W



    - W
    oui c'est exactement ce que je souhaite faire et que je n'arrive pas à faire pourtant au début il m'a semblé que c'est quelque chose de réalisable facilement du genre mettre yscrollbar à la dernière ligne insérée mais je me rend compte que c'est beaucoup plus compliqué que ça
    alors ma question en suivant ma démarche est ce qu"il y a un moyen pour s’en sortir est ce possible de me débloquer

    merci d'avance pour votre aide

  8. #8
    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,

    Citation Envoyé par THCH66 Voir le message
    alors ma question en suivant ma démarche est ce qu"il y a un moyen pour s’en sortir est ce possible de me débloquer
    La réponse à la question est d'appeler la méthode yview_moveto du canvas avec le paramètre qui va bien.

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

Discussions similaires

  1. [JScrollPane] [JTable] Se placer à la dernière ligne
    Par wishnight dans le forum Composants
    Réponses: 9
    Dernier message: 24/12/2015, 18h42
  2. [XL-2013] Couper/Coller données suite recopie dernière ligne du tableau par macro
    Par joel50 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 14/08/2015, 15h38
  3. Réponses: 14
    Dernier message: 30/03/2005, 21h50
  4. Lecture de fichier - dernière ligne non prise en compte
    Par JulienPles dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 16/03/2005, 11h57
  5. l'identifiant unique de la dernière ligne insérée
    Par dim_italia dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 23/08/2004, 17h55

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