Test de scroll bar Tkinter
Résolu
Phil_1857
Messages postés
1872
Date d'inscription
Statut
Membre
Dernière intervention
-
Phil_1857 Messages postés 1872 Date d'inscription Statut Membre Dernière intervention -
Phil_1857 Messages postés 1872 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Tkinter listbox scrollbar
- Double scrollbar ✓ - Forum CSS
- Vba listbox additem plusieurs colonnes ✓ - Forum Excel
- Listbox index - Forum VB / VBA
- Vba listbox ✓ - Forum VB / VBA
- Utilisation de listbox - Forum Bureautique
3 réponses
Bonjour,
Il y a besoin pour ce faire de lier les evénements roulette souris au scroll du canevas.
Une petite fonction pour agir sur le défilement du canevas via le yview, UNITS est une constante tk.
Puis finalement lier les actions molette à cette fonction.
Normalement, ça devrait fonctionner au poil, si non, s'assurer que le canevas à le focus en utilisant focus_set().
Il y a besoin pour ce faire de lier les evénements roulette souris au scroll du canevas.
Une petite fonction pour agir sur le défilement du canevas via le yview, UNITS est une constante tk.
def mouse_wheel(evt): if evt.num == 4: graph_area.yview('scroll', -1, UNITS) elif evt.num == 5: graph_area.yview('scroll', 1, UNITS)
Puis finalement lier les actions molette à cette fonction.
graph_area.bind('<Button-4>', mouse_wheel) graph_area.bind('<Button-5>', mouse_wheel)
Normalement, ça devrait fonctionner au poil, si non, s'assurer que le canevas à le focus en utilisant focus_set().
Bonjour klopinklopan,
Ca ne fonctionne pas, même avec le focus: en faisant un print, j'ai vu que l'on entre pas dans la fonction mouse_wheel(): j'en conclus que les bind ne sont pas bons
Or, entre temps, j'ai trouvé ceci:
avec l'attribut delta de evt
En faisant un print de evt.delta, je vois qu'on incrémente de 120 à chaque mouvement, j'ai donc fait ceci pour ralentir un peu:
Ceci dit, comme je le disais dans mon message initial, cela fonctionne avec une Listbox, sans cette fonction additionnelle, on peut en conclure que toute cette mécanique est déjà incluse dans ce type de widget ?
Ca ne fonctionne pas, même avec le focus: en faisant un print, j'ai vu que l'on entre pas dans la fonction mouse_wheel(): j'en conclus que les bind ne sont pas bons
Or, entre temps, j'ai trouvé ceci:
graph_area.bind('<MouseWheel>', mouse_wheel)
avec l'attribut delta de evt
En faisant un print de evt.delta, je vois qu'on incrémente de 120 à chaque mouvement, j'ai donc fait ceci pour ralentir un peu:
def mouse_wheel(evt): graph_area.yview('scroll', int(evt.delta/120)*-1, UNITS)
Ceci dit, comme je le disais dans mon message initial, cela fonctionne avec une Listbox, sans cette fonction additionnelle, on peut en conclure que toute cette mécanique est déjà incluse dans ce type de widget ?
En effet, Button-4 et Button-5 ne fonctionnent que sur linux, sur windows faut se servir de MouseWheel et là je ne sais pas comment c'est géré...
Et comme je n'ai pas de windows sous la main, je ne peux tester.
Je pense que oui, Listbox inclus cela, faudrait regarder dans la source python de tkinter et également sur le site de tcl/tk.
Et comme je n'ai pas de windows sous la main, je ne peux tester.
Je pense que oui, Listbox inclus cela, faudrait regarder dans la source python de tkinter et également sur le site de tcl/tk.