Le défilement de plusieurs Tkinter listboxes ensemble
J'ai plusieurs Tkinter, les listes que j'ai le défilement à l'aide d'une seule barre de défilement, mais je tiens ÉGALEMENT à défiler ensemble pour la roulette de la souris de l'activité sur l'une des listes déroulantes.
Comment faire?
Mon code actuel est basé sur le dernier motif évoqué ici: http://effbot.org/tkinterbook/listbox.htm Il fonctionne très bien en utilisant uniquement la barre de défilement, mais les zones de liste de défilement de manière autonome lorsque la molette de la souris est utilisé.
Je suppose qu'il serait également acceptable pour désactiver la molette de la souris sur l'individu zones de liste, si c'est possible.
OriginalL'auteur BobC | 2010-11-01
Vous devez vous connecter pour publier un commentaire.
Résoudre le problème à peu près la même manière que vous avez fait pour relier les deux widgets à une seule barre de défilement: créer des liaisons pour la roulette de la souris et avoir ces liaisons affectent à la fois les zones de liste, plutôt qu'un seul.
Le seul vrai truc est de savoir que vous obtenez différents événements de la roulette de la souris en fonction de la plateforme: windows et Mac obtient
<MouseWheel>
événements, linux devient<Button-4>
et<Button-5>
événements.Voici un exemple, testé sur mon Mac avec python 2.5:
si vous avez utilisé le code ci-dessus exactement comme il est posté, oui, vous verrez que. Avez-vous lu la partie où je dis que linux dispose de différents événements de la molette de la souris? Ubuntu linux.
Doh! Sur Linux, la roulette de la souris utilise événements <Bouton-4> et <Bouton-5>. Pour être général, je suis de liaison à tous les 3.
De Plus, l'événement Linux.delta est de 120, de sorte que le fragment de code suivant assure le défilement régulier: if (event.num == 4): delta = -1 elif (événement.num == 5): delta = 1 else: delta = event.delta
J'ai eu le même problème. Viens de remarquer une chose. J'ai créé une liste de zones de liste et utilisé une boucle for pour lier le même événement à chacun d'entre eux et un autre pour la boucle à l'intérieur de OnMouseWheel() pour itérer sur chaque zone de liste. Il ne fonctionne pas avec de l'événement.delta, parce que les listes déroulantes ont été faites défiler dans différentes directions à partir de l'une de mes souris a été plus de. Cela peut être résolu en disant:- (événement.delta). Fonctionne sur Windows, Python 3.5.1
OriginalL'auteur Bryan Oakley
Je sais que c'est assez vieux, mais je pense que la solution est un peu plus simple que ceux proferred ici. En supposant que vous toujours voulez les zones de liste pour être en accord, les deux réponses ci-dessus ne sont pas de même des solutions complètes - modification de la sélection au moyen de la touche, les touches de défilement d'une zone de liste, mais pas les autres.
Donc, en regardant les réponses, j'ai demandé - pourquoi ne sont-ils pas d'accroche de l'yscrollcommand rappel au lieu de simplement l'envoyer directement à la barre de défilement? Donc, je n'ai que ça:
OriginalL'auteur Santiclause
Voici ma solution actuelle, codé comme un stand-alone, fonction (oui, il devrait être un objet).
Caractéristiques et exigences:
(minimum 1).
même longueur.
ajusté pour correspondre au contenu.
soit la molette de la souris ou de la
barre de défilement.
Linux, mais n'a été testé que sur
Linux.
Code:
Des Suggestions d'amélioration sont les bienvenus!
OriginalL'auteur BobC