2010-11-10 33 views
4

J'étudie le widget Tkinter Listbox et ont été incapables de trouver des solutions pour les fonctionnalités suivantes:Python/Tkinter: séparateurs Listbox, éléments désactivés, navigation au clavier?

  1. Comment puis-je créer des éléments de séparation horizontaux non sélectionnables, par exemple. séparateurs équivalents au widget du menu Tkinter .add_separator()? (Utiliser des caractères comme des tirets et des traits de soulignement est horrible).

  2. Comment désactiver un élément spécifique? J'ai essayé d'utiliser .itemconfig (index, state = 'disabled') sans succès.

  3. Comment puis-je activer la navigation au clavier, par ex. lorsque la saisie au clavier d'un utilisateur fait automatiquement défiler l'un vers l'élément le plus proche commençant par le texte tapé par l'utilisateur? Dois-je lier ('<KeyPress>, ...) et gérer moi-même ce comportement?

  4. Certaines des fonctionnalités ci-dessus seraient-elles plus faciles à implémenter à l'aide d'un widget Texte ou du widget ttk Treeview?

Merci, Malcolm

+0

Je suggère que vous obtiendrez une meilleure réponse si vous les demandez séparément. –

+0

@Steven: Je n'étais pas sûr de ce que la posture de la communauté était en ce qui concerne la façon de poser des questions. Je vais diviser les messages futurs en questions individuelles. – Malcolm

+0

@ Malcom Je ne suis pas sûr non plus de ce que la communauté pense à ce sujet. J'ai lu votre question, j'ai pensé que je pouvais répondre à quelques-uns d'entre eux, mais je ne l'ai pas fait parce que je ne pouvais pas répondre à toute la question. –

Répondre

5
  1. vous ne pouvez pas. Le widget ne supporte pas cela.

  2. Vous ne pouvez pas désactiver certains éléments, le widget ne prend pas en charge un attribut d'état. Cela étant dit, vous pouvez surveiller la sélection et faire ce qui est approprié si l'utilisateur sélectionne quelque chose qui est désactivé, et utiliser l'élément foreground pour indiquer disabled-ness.

  3. Vous devrez vous lier aux événements keypress et gérer le comportement vous-même. Ce n'est pas particulièrement difficile, juste un peu fastidieux. Le widget de texte peut être votre meilleur pari, mais vous devrez ajouter des liaisons pour imiter les liaisons par défaut de la liste.

Ligne de fond: Tkinter ne fournit rien qui supporte directement ce que vous voulez faire, mais les blocs de construction sont tous là. Vous devrez juste le construire vous-même.

+1

Merci. Idée astucieuse (2) pour simuler l'invalidité. Je vais chercher un char Unicode comme meilleur séparateur que le tiret ou le trait de soulignement traditionnel. – Malcolm