Test de scroll bar Tkinter
Résolu/Fermé
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
-
27 juil. 2021 à 17:19
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 28 juil. 2021 à 19:18
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 28 juil. 2021 à 19:18
A voir également:
- Scrollbar tkinter
- Tkinter scrollbar frame ✓ - Forum Python
- Fermer une fenetre tkinter - Forum Python
- Tkinter rotate image - Forum Python
- Tableau tkinter - Forum Python
- Html scrollbar ✓ - Forum HTML
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().
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
Modifié le 28 juil. 2021 à 13:38
Modifié le 28 juil. 2021 à 13:38
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.
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
28 juil. 2021 à 19:18
28 juil. 2021 à 19:18
OK, en tout cas ca marche bien avec MouseWheel
Merci pour tes réponses quand même !
Merci pour tes réponses quand même !