IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

[Tkinter] Listbox


Sujet :

Tkinter Python

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 80
    Points : 74
    Points
    74
    Par défaut [Tkinter] Listbox
    J'ai encore un probleme assez génant .

    J'ai programmé une listbox avec scroll dans une fenetre Tk normale. J'ai essayé de la placer dans une frame et la commence les ennuis: La listBox s'affiche mais le scroll (initialement en pack) ne marche pas en grid.

    Un screen est mieux:




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    def __init__(self, boss = None):
     
      Frame.__init__(self)
      #-------------------------------------SCROLLBAR et LIST   ------------------------------------------#
     
     
      self.scrollbar= Scrollbar()
      self.scrollbar.grid(row=1, column=1)
    # fenetre.geometry("20x20") 
      listbox_left = Listbox(self, yscrollcommand = self.scrollbar.set)
    #  listbox_left.geometry("20x20")  on peut pas avec une Listbox
     
      for item in ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"]:
       listbox_left.insert(END, item)
     
      listbox_left.grid(row=1, column=1)
      self.scrollbar.configure(command = listbox_left.yview)
     
     
     
      self.scrollbar2 = Scrollbar()
      self.scrollbar2.grid()
     
      listbox_right = Listbox(self, yscrollcommand = self.scrollbar2.set)
     
      for item in ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"]:
        listbox_right.insert(END, item)
     
      listbox_right.grid(row=1, column=3)
      self.scrollbar2.config(command = listbox_right.yview)
    euh, le code, je l'ai un peu bidouiller mais il marche encore ds un frame.

    comment mettre les bonnes coordonnees pour ma listbox?

    Une deuxieme question, comment associer la selection d'un element de la listbox pour l'utiliser (un genre de .get() pour les Entry). J'ai entendu parler d'un active, ACTIVATE et des trucs comme ca, mais je n'y arrive pas.

    3. Y a t il moyen de faire apparaitre la listbox sous forme de menu deroulant, tout en ayant les propriétés d'une lisbox (pas d'un menu)?

    Merci bcp

  2. #2
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    Je pense qu'il faut que tu packes ta listbox et ton scrollbar dans une frame qui sera en grid dans la frame principale

    exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    import Tkinter as Tk
    root = Tk.Tk()
    f1 = Tk.Frame(root)
    s1 = Tk.Scrollbar(f1)
    l1 = Tk.Listbox(f1)
    f2 = Tk.Frame(root)
    s2 = Tk.Scrollbar(f2)
    l2 = Tk.Listbox(f2)
    for i in range(20):
        l1.insert(i, str(i))
        l2.insert(i, str(i))
     
    s1.config(command = l1.yview)
    s2.config(command = l2.yview)
    l1.config(yscrollcommand = s1.set)
    l2.config(yscrollcommand = s2.set)
    l1.pack(side = Tk.LEFT, fill = Tk.Y)
    l2.pack(side = Tk.LEFT, fill = Tk.Y)
    s1.pack(side = Tk.RIGHT, fill = Tk.Y)
    s2.pack(side = Tk.RIGHT, fill = Tk.Y)
    f1.grid(row=0, column=0)
    f2.grid(row=0, column=1)
    root.mainloop()

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 80
    Points : 74
    Points
    74
    Par défaut
    Merci bcp pour l'info, ca marche au poil (je ne savais pas qu'on pouvait mélanger pack et grid. Est-ce seulement dans les Frames?)

    Une deuxieme question, comment associer la selection d'un element de la listbox pour l'utiliser (un genre de .get() pour les Entry). J'ai entendu parler d'un active, ACTIVATE et des trucs comme ca, mais je n'y arrive pas.
    Euh, qqn pourrait m'aider?

    Merci de votre aide
    ++

    [edit] J'ai des problemes pour transposer le code de guigui. On ne peut pas créer de Frame dans la frame préexistante :s (je dois garder une frame entière pour l'image de fond) Comment je fais alors, puisque grid et pack ensemble est impossible??

  4. #4
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    Merci bcp pour l'info, ca marche au poil (je ne savais pas qu'on pouvait mélanger pack et grid. Est-ce seulement dans les Frames?)
    Tu as le droit de mélanger les grid et les pack mais pas dans un même conteneur => Un conteneur ne doit comporter qu'un seul type de grid/ pack/place et dans chaque sous-conteneur idem (mais pas forcément le même)


    Citation:
    Une deuxieme question, comment associer la selection d'un element de la listbox pour l'utiliser (un genre de .get() pour les Entry). J'ai entendu parler d'un active, ACTIVATE et des trucs comme ca, mais je n'y arrive pas.
    Euh, qqn pourrait m'aider?

    Merci de votre aide
    ++
    est-ce cela que tu cherches ?
    http://python.developpez.com/faq/?pa...xSelectionClic

  5. #5
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 80
    Points : 74
    Points
    74
    Par défaut
    c le bon lien, je test tt de suite. Merci

    Par contre, je n'arrive pas a transposer ton code Frame dans une autre frame. Comment je dois faire?

    J'ai des problemes pour transposer le code de guigui. On ne peut pas créer de Frame dans la frame préexistante :s (je dois garder une frame entière pour l'image de fond) Comment je fais alors, puisque grid et pack ensemble est impossible??

  6. #6
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    Si tu mets la fonction après le bind, l'appli te génèrera une erreur au moment du bind car la fonction lui est à ce moment-là inconnue

    Sur le même exemple que tout à l'heure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    import Tkinter as Tk
    root = Tk.Tk()
    f1 = Tk.Frame(root)
    s1 = Tk.Scrollbar(f1)
    l1 = Tk.Listbox(f1)
    f2 = Tk.Frame(root)
    s2 = Tk.Scrollbar(f2)
    l2 = Tk.Listbox(f2)
    for i in range(20):
        l1.insert(i, str(i))
        l2.insert(i, str(i))
     
    s1.config(command = l1.yview)
    s2.config(command = l2.yview)
    l1.config(yscrollcommand = s1.set)
    l2.config(yscrollcommand = s2.set)
    l1.pack(side = Tk.LEFT, fill = Tk.Y)
    l2.pack(side = Tk.LEFT, fill = Tk.Y)
    s1.pack(side = Tk.RIGHT, fill = Tk.Y)
    s2.pack(side = Tk.RIGHT, fill = Tk.Y)
    f1.grid(row=0, column=0)
    f2.grid(row=0, column=1)
    def clic(event):
        i=event.widget.curselection()  ## event.widget represente le widget clique
        print event.widget.get(i)  
     
    l1.bind('<ButtonRelease-1>',clic)
    l2.bind('<ButtonRelease-1>',clic)
    root.mainloop()

  7. #7
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 80
    Points : 74
    Points
    74
    Par défaut
    merci. J'essaie de le transposer mtnt et je vous dis quoi...


    [edit] Ca marche mtnt, avec le .pack aussi
    Ce prob est résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. tkinter recuperer tous les éléments d'une listbox
    Par RyzenOC dans le forum Général Python
    Réponses: 2
    Dernier message: 21/04/2015, 16h53
  2. Réponses: 5
    Dernier message: 06/10/2009, 22h01
  3. Probleme Listbox Tkinter
    Par Noob_saibot dans le forum Tkinter
    Réponses: 0
    Dernier message: 28/08/2009, 19h06
  4. [Tkinter] Redimensionner une Listbox
    Par THE_VIP dans le forum Tkinter
    Réponses: 6
    Dernier message: 29/05/2008, 17h36
  5. DrawItem d'un listbox...
    Par scorpiwolf dans le forum C++Builder
    Réponses: 5
    Dernier message: 22/06/2007, 15h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo