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 :

Pas de sélection avec Listbox


Sujet :

Tkinter Python

  1. #1
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut Pas de sélection avec Listbox
    Dans l'étude d'un nouveau widget, a dire le widget Listbox je suis confronté au problème de ne pas pouvoir accéder a la sélection comme le programme expérimental qui suit:
    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
    from Tkinter import *
    fen= Tk()
    list= Listbox (fen)
    list.insert(0, a)
    list.insert(1, b)
    list.insert(2, c)
    i= list.curselection()
    def test () :
      lab.configure(text=i) 
    lab= Label(fen)
    bout= Button(fen, command= test)
    list.pack()
    lab.pack()
    bout.pack()
    mainloop()
    Pas facile avec avec ce widget, car n'ayant que peut de doc sur le sujet et m'en etre jamais servi. J'obtiens dans le Label ceçi comme sélection: () et ca ne marche pas non plus avec list.bind("<Button-1>", test).
    Merci de me traiter de crétin après m'avoir répondu.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    Tu as en effet quelques soucis dans ton code.
    Lorsque tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    i= list.curselection()
    i est créer au démarrage de l'application. vu que rien n'est sélectionné dans ta liste, il contient un tuple vide: ()
    Ensuite pour modifier un label durant l'exécution du programme il faut utiliser un StringVar.

    Voici un 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
    25
    26
    27
     
    from Tkinter import *
     
     
    def test () :
      index = list.curselection()
      if index:
          text = list.get(index)
      else:
          text = "pas de selection"
     
      varStr.set(text)
     
     
    fen= Tk()
    list= Listbox (fen)
    list.insert(0, "ligne 1")
    list.insert(1, "ligne 2")
    list.insert(2, "ligne 3")
     
    varStr = StringVar()
    lab= Label(fen, textvariable=varStr)
    bout= Button(fen, text="selection", command= test)
    list.pack()
    lab.pack()
    bout.pack()
    mainloop()
    pour la doc, tu peux la trouver ici:http://infohost.nmt.edu/tcc/help/pubs/tkinter/

  3. #3
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut Appelez la police par radio il y a un problème dans la boite
    J'ai réussi a mieux comprendre la mécanique des StringVar cependant en suivant l'exemple d'un programme du cour de Swimmen...
    extrait du code:
    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
     
     # Nom français et nom technique des quatre styles de police :
     stylePoliceFr =["Normal", "Gras", "Italique", "Gras/Italique"]
     stylePoliceTk =["normal", "bold", "italic" , "bold italic"]
     # Le style actuel est mémorisé dans un 'objet-variable' Tkinter ;
     self.choixPolice = StringVar()
     self.choixPolice.set(stylePoliceTk[0])
     # Création des quatre 'boutons radio' :
     for n in range(4):
       bout = Radiobutton(self, text = stylePoliceFr[n], variable = self.choixPolice, value = stylePoliceTk[n], command = self.changePolice)
       bout.pack(side =LEFT, padx =5)
     
     def changePolice(self):
     """Remplacement du style de la police actuelle"""
     police = "Arial 15 " + self.choixPolice.get()
     self.texte.configure(font =police)
    Je ne comprend pas comment le StringVar prend (.set()) et renvoi la valeur (.get()) vu que il est initialiser a index[0] de la liste et n'est pas affecter (.set()) par la suite: résultat dans mon programme j'ai le meme problème precedement exposer avec mes Radiobuttons, je n'arrive pas a comprendre comment le StringVar peut prendre automatiquement une des 4 valeurs différentes du Radiobutton.

    Passons...

    J'ai réussi a configurer mon Label, avec un bouton exécutant la configuration une fois le string dans la Listbox choisi, mais je trouve très dommage que je ne trouve pas le moyen de lier la Listbox a un clic de souris pour configurer le Label directement.

    Passons...

    Je n'arrive pas non plus a configurer dynamiquement par Listbox, StringVar etc.. un texte de Label avec des polices de caractères portant des noms composés pourtant je tuple le StringVar car les noms de polices composés, différement des noms de polices composer d'un seul mot qui passe en string, doivent etre contenu dans un tuple, si je ne me trompe pas.

    Merci de bien vouloir m'aider sur le point que vous voulez sa sera toujours bienvenue:
    -La mécanique des valeurs des Radiobutton.
    -Des techniques de binding a une Listbox.
    -La configuration de polices a noms composés.

  4. #4
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    j'ai quelques difficultés avec les sujets suivants dans mon programme:
    -La mécanique des valeurs des Radiobutton.
    -Des techniques de binding a une Listbox.
    -La configuration de polices a noms composés.
    Voici le code:
    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
    31
    32
    33
    From Tkinter import *
     
    def change_police(event) :
      a=pol_list.curselection()
      b=pol_list.get(a)
      i.set(b)
      panneau.configure(font=i.get())
     
    def style () :
      x.set()#Je ne sais pas quoi mettre comme argument car x.set() en requière un
      panneau.configure(font=x.get())
     
    style_name=['normal','italic', 'bold','bold italic']
    style_value=['normal','italic', 'bold','bold italic']
    fen=Tk()
    i=StringVar()
    x=StringVar()
    x.set('italic')
    panneau=Lable(fen, text='Test')
    pol_list=Listbox(fen)
    pol_list.insert(0, Arial)
    pol_list.insert(1, Courrier)
    pol_list.insert(2, Comic)
    pol_list.insert(3, Fixedsys) #etc...
    pol_list.bind("<Button-1>", change_police)
     
    for n in range(4) :
      rad_bout=Radiobutton(fen, text=style_name[n], value=style_value[n], variable=x, command= style)
      rad_bout.pack()
     
    panneau.pack()
    poli_list.pack()
    mainloop()
    -Le bind fonctionne mais renvoie un message d'erreur alors que le meme programme avec un Button a la place du bind n'en renvoie pas.

    -Je n'arrive pas a configurer le Label avec des polices a nom composer tel "Times New Roman" par exemple et par aileur les changement sont simplement dans la taille et l'épaisseur du trait de la police mis a part quelques une comme "Times", est-ce normal ?

    -Le Radiobutton ne marche pas car je n'arrive pas a lui affecter la valeur choisie j'ai essayer x.set(rad_bout.cget('value')) mais ce ne marche toujours pas.

    Merci de bien vouloir m'aider.

Discussions similaires

  1. ERREUR N°9 : l'indice n'appartient pas à la sélection avec .visible
    Par saninx dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 12/05/2015, 10h36
  2. Sélection avec SUM ou COUNT ou pas possible ?
    Par kiriaphil dans le forum Requêtes
    Réponses: 8
    Dernier message: 27/12/2012, 11h40
  3. Réponses: 5
    Dernier message: 11/09/2005, 12h17
  4. [Firebird] on ne peux pas l'exploiter avec Delphi 2005 ??
    Par Harry dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/04/2005, 11h40
  5. [GifDecoder] marche pas dans applet avec IE
    Par formentor dans le forum Applets
    Réponses: 2
    Dernier message: 06/05/2003, 10h43

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