Python Tkinter positionnement scrollbar

Résolu
Leos -  
Oblinky Messages postés 11 Statut Membre -
Bonjour à tous,

Une petite question à propos des barres de défilement de Tkinter : comment initialiser la position d'une barre de défilement (et de la frame associée) à un endroit donné (dans mon cas, en haut de la frame) ? Pour le moment ma barre se positionne automatiquement à la fin (en bas ou à gauche) de ma frame...

Toute aide sera grandement appréciée! J'ai bien cherché dans les documentations diverses de Tkinter mais pas moyen de trouver ça.

Merci d'avance :)
Configuration: Windows XP
Python 2.5

4 réponses

  1. Leos
     
    Finalement, j'ai trouvé comment faire, voilà le code:

    from Tkinter import *
    class Scroll():

    def __init__(self):

    # Fonction permettant de lier le déplacement de la fenêtre avec la molette de la souris
    def scrollEvent(event):
    print event.delta
    if event.delta >0:
    print 'déplacement vers le haut'
    self.liste.yview_scroll(-2,'units')

    else:
    print 'déplacement vers le bas'
    self.liste.yview_scroll(2,'units')

    # Lorsque l'on rentre dans la fenêtre, on active la molette
    def enrEnter(event):
    self.root.bind('<MouseWheel>', scrollEvent)

    # Lorsque l'on sort de la fenêtre, on désactive la liaison avec la molette
    def enrLeave(event):
    self.root.unbind('<MouseWheel>')

    # Création de la fenêtre principale
    self.root = Tk()
    # Création de la scrollbar
    self.scroll=Scrollbar(self.root,orient=VERTICAL)
    self.scroll.grid(row=0,column=1,sticky=N+S)
    self.scroll1=Scrollbar(self.root,orient=HORIZONTAL)
    self.scroll1.grid(row=1,column=0,sticky=E+W)
    # Création du canevas qui contient la frame qui contient les boutons
    self.liste =Canvas(self.root,yscrollcommand=self.scroll.set,xscrollcommand=self.scroll1.set)

    self.root.grid_columnconfigure(0,weight=1)
    self.root.grid_rowconfigure(0,weight=1)

    # Création de la frame, dans le canevas, qui contient les boutons
    self.listeBout=Frame(self.liste)

    # Création des boutons
    for i in range(20):
    titre=str(i)
    bou=Checkbutton(self.listeBout,text=titre)
    bou.grid(sticky=N)

    # Pack du canevas
    self.liste.grid(row=0,column=0)
    # Configuration de la scrollbar
    self.scroll.config(command=self.liste.yview)
    self.scroll1.config(command=self.liste.xview)
    # Positionnement du canevas au début
    self.liste.create_window(0,0,window=self.listeBout)
    self.listeBout.update_idletasks()
    self.liste.config(scrollregion=self.liste.bbox('all'))
    self.liste.yview_moveto(0)
    self.liste.xview_moveto(0)

    self.root.bind('<Enter>',enrEnter)
    self.root.bind('<Leave>',enrLeave)

    self.root.mainloop()

    barreDefil=Scroll()
    12
    1. Oblinky Messages postés 11 Statut Membre
       
      Le post est très ancien... mais je pense que cette remarque vaut le coup d'être exprimée.

      J'ai repris ce que vous proposez ici, après quelques changements pour l'adapter en Python 3, cela fonctionne très bien, sauf quand la souris est au dessus de canevas (que vous avez appelé liste), le défilement à la roulette ne se fait alors plus.

      J'ai essayé de rajouter self.liste.bind('<MouseWheel>', scrollEvent) dans scrollEvent, sans succès.

      Peut-être quelqu'un aura-t-il la solution à cela ?
      0
      1. Oblinky Messages postés 11 Statut Membre > Oblinky Messages postés 11 Statut Membre
         
        J'ai trouvé la solution, il faut utiliser bind_all au lieu de bind pour le canevas :

        ...

        # Lorsque l'on rentre dans la fenêtre, on active la molette
        def enrEnter(event):
        self.root.bind('<MouseWheel>', scrollEvent)
        self.liste.bind_all('<MouseWheel>', scrollEvent)

        ...

        En espérant que cela en aidera certains.
        0
  2. Leos
     
    Alors, personne n'aurait une petite idée pour m'aider?
    2
    1. Leos
       
      Je continue de chercher, mais toujours pas moyen de résoudre mon problème. J'attends toujours vos propositions! ;)
      Sinon un nouveau problème m'est apparu: comment faire bouger une scrollbar avec la molette de la souris?

      Merci de votre aide..
      0
  3. Leos
     
    Eh bien j'ai fini par trouver comment positionner mes scrollbars en haut à gauche de mon canevas, il faut pour cela utiliser 'canvas.yview_moveto(0)' et 'canvas.xview_moveto(0)', où vous remplacez 'canvas' par le nom de votre canevas.

    Je continue à chercher pour la molette, je sens que je touche au but! Mais apparemment ça n'intéresse pas grand-monde...
    2
  4. visual petanque Messages postés 1 Statut Membre
     
    Je suis tombé par hasard sur votre travail "solitaire". Je vous en remercie car je suis très intéressé.
    Je n' ai pas encore testé mais ça ira certainement.
    Cordialement,
    visual petanque
    0