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 :

Listbox après sélection option copie dans label écrasé par option 2eme Listbox [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2014
    Messages : 11
    Points : 5
    Points
    5
    Par défaut Listbox après sélection option copie dans label écrasé par option 2eme Listbox
    Bonjour, Je suis en train faire un jeu de mots avec Tkinter. Pour cela j'utilise pour l'instant 2 ListBox (sur 9 prévues) pour afficher les mots disponibles pour jouer.
    Ainsi, qu'une ligne de labels qui recevront les mots sélectionnés dans les ListBox.
    Jusque là tout va bien. J'arrive à coller dans le premier label le premier mot (article) sélectionné parmi les 6 possibles.
    Mais, là où cela ne va plus c'est quand je veux coller un mot de la 2eme listbox (celle des noms) dans le deuxième label.
    le mot est non seulement inscrit dans le deuxième label (ce qui est normal). Mais, aussi dans le label réservé aux articles (qu'il écrase).
    J'ai essayé mille et un test possibles (selon mes connaissances limités) je ne comprends pas pourquoi les mots sélectionnés sont dupliqués des les deux cases label ??
    Pourtant, j'ai bien dissocié les deux ListBox et les labels n'ont pas le même libellé. pour les tests j'ai deux fonctions (une pour les articles et une pour les noms). Malgré cela les mots sélectionnés sont dupliqués dans les deux labels.
    Quelqu'un voit-il la solution à ce problème qui est certainement simple à résoudre..
    J'ai des capture d'écran du code et de l'affichage des ListBox. Mais je ne sais pas comment les charger dans le forum ??
    A BIENTÔT !

  2. #2
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 881
    Points : 1 544
    Points
    1 544
    Billets dans le blog
    4
    Par défaut
    Bonjour,
    Fais nous parvenir ton code à l'aide des balises codes du forum (clic sur symbôle # lors de l'édition de ton message)…
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2014
    Messages : 11
    Points : 5
    Points
    5
    Par défaut Code du programme et résultats lors de l'éxécutio étape par étape.
    J'ai téléchargé les 8 photos .jpg pour montrer ce qui se passe.
    Les deux première présentent le code du programme.
    et les autres les résultats lors de l'éxecution. Clic dans Listbox1 (Articles). Puis Listbox2 (Noms).
    à l'éxécution, les trois premières photos montre un bon fonctionnement.
    Par contre, dés que je clique dans la deuxième Listbox des (Noms) à écrire à la suite de l'article déjà mis dans la première case (Lab1).
    Le mot choisi s'inscrit dans sa case (la deuxième). Mais s'inscrit aussi dans la première case ou il y a l'article et l'écrase. Ce n'est pas le but recherché.
    Dans le programme,Je me suis arrêté à la deuxième case car il y avait ce Bug ! Parce que le but du jeu c'est de faire des phrases sur au moins 10 case (Labels) et autant de Listbox (une par type de mot (articles,noms,verbes,prépositions,etc...)
    Il faut que le mot mis dans une case ne bouge plus de cette place. Il faut aussi considérer que l'on peut utiliser un autre article (identique ou autre) ou Nom, verbe,etc... dans les autres case.
    En fait, il ne faut pas qu'un mot en écrase un autre qui est déjà dans les case précédents. Pour moi, ça paraît compliqué ! Mais, peut-être pas pour vous !
    J'utilise TKINTER au ras des pâquerettes. Je ne veut pas utiliser de classe ! ou des fonctions compliquées....
    J'espère que vous pourrez les visualiser. Car, c'est la première fois que j'envoie des documents dans ce forum.
    A BIENTÔT ! à vous lire..
    Images attachées Images attachées         

  4. #4
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 881
    Points : 1 544
    Points
    1 544
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Bonjour,
    Fais nous parvenir ton code à l'aide des balises codes du forum (clic sur symbôle # lors de l'édition de ton message)…
    Bonjour,
    Des photos ne permettent pas de copier/coller ton code pour le tester ... Merci d'utiliser les balises codes du forum.
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2014
    Messages : 11
    Points : 5
    Points
    5
    Par défaut Code python-Tkinter de l'application jeu de mots (phases)
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    # G:/PROGRAMMATION\THONNY IDE\MES PROGRAMMES\PROGRAMMES\python-TKINTER\TKINTERCrazyListboxDansCanvas.py 
    from tkinter import *
    fen = Tk()
    fen.title("ESSAI AVEC CANVAS")
    fen.geometry("600x600")
     
    # Fonctions test Clics Listbox et affichage dans labels (lab1,Lab2, etc...)
    # ===========================================
     
    def selarticle(event):
        selart=Lb1.selection_get()
        Lab1.configure(text=selart,bg='silver')
     
    def selnom(event):
        selno=Lb2.selection_get()
        Lab2.configure(text=selno,bg='skyblue')
     
    # Création (dans 1er canvas) une ligne vierge de labels devant recevoir les mots cliqués dans les Listbox ci-dessous.
    # =======================================================================     
    police=("arial",12,"bold")    
    CanPlateau = Canvas(fen, width=500, height=50, bg='burlywood')
    # pour placer le canvas aux coordonnées x,y remplacer monCanvas.pack() par place(x,y)
    CanPlateau.place(x=10,y=150)    # va placer le début du Canvas aux coordonnées (10,150).
     
    Lab1=Label(CanPlateau,text="",font=police,width=12,height=3,relief=RAISED,bg='burlywood')
    Lab1.grid(row=0,column=0)
    Lab2=Label(CanPlateau,text="",font=police,width=12,height=3,relief=RAISED,bg='burlywood')
    Lab2.grid(row=0,column=1)
    Lab3=Label(CanPlateau,text="",font=police,width=12,height=3,relief=RAISED,bg='burlywood')
    Lab3.grid(row=0,column=2)
     
    # Création 2eme Canvas contenant les ListBox des mots à sélectionner (réduites à Deux pour les essais)
    ===============#================================================
    CanListebox = Canvas(fen, width=500, height=50,bg='pink')
    # pour placer le canvas aux coordonnées x,y remplacer monCanvas.pack() par place(x,y)
    CanListebox.place(x=10,y=400)   # va placer le début du Canvas aux coordonnées (10,400)
     
    # Listbox Articles
    # =========
    Articles=["Le","La","Les","Un","Une","Des"]
    nbmots=len(Articles)
     
    Lb1=Listbox(CanListebox, height=nbmots,width=10, font=police,justify=LEFT,bg="silver")
    for i in range(nbmots):
        Lb1.insert(i,Articles[i])
    Lb1.grid(row=0,column=0)
    Lb1.bind('<<ListboxSelect>>',selarticle)
     
    # Listbox Noms Communs
    # ===============
    Noms=["chien(s)","grenouille(s)","singe(s)","limace(s)","araignée(s)","cloporte(s)","anguille(s)","crevette(s)"]
    nbmots=len(Noms)
     
    Lb2=Listbox(CanListebox, height=nbmots,width=10, font=police,justify=LEFT,bg="skyblue")
    for i in range(nbmots):
        Lb2.insert(i,Noms[i])
    Lb2.grid(row=0,column=1)
    Lb2.bind('<<ListboxSelect>>',selnom)
     
    fen.mainloop()
    J'ai organisé le code pour qu'il soit plus lisible !
    A BIENTÔT !

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 781
    Points
    36 781
    Par défaut
    Salut,

    Avant de partir à coder une application qui utilise plusieurs widgets, vous devriez commencer par essayer de comprendre le fonctionnement des différents widgets que vous voulez utiliser et faire de petits exemples de code pour vérifier qu'ils se comporteront bien comme vous l'attendez.

    <<ListboxSelect>> sera appelé lorsque la "selection" change.
    Et quand vous avez plusieurs Listbox, cette sélection est "globale".
    Par défaut, c'est le clipboard/presse papier.

    Si on clique sur un item d'une des Listbox, la selection "globale" change, les callbacks associés sont donc appelés et vous récupérez la même chaine de caractères!
    C'est pour contrôler ce défaut que l'option exportselection existe.

    Cela fait, .selection_get va planter parce qu'on ne met plus rien dans le clipboard et que ce n'est pas la "bonne façon" pour récupérer les items sélectionnés dans une Listbox: on récupère la liste des index sélectionnés via .curselection, puis on fait un .get dessus.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2014
    Messages : 11
    Points : 5
    Points
    5
    Par défaut Demande d'exemple de code !
    Bonjour,
    Je comprends que je ne sais pas grand chose sur les actions à entreprendre. je n'ai pas pensé à la déclaration "GLOBAL". là, je suis muet !
    c'est pourquoi, je ne demande qu'à apprendre. J'ai déjà essayé du code avec une ListBox (ça fonctionne avec un Print("vous avez cliqué sur:",item). Mais, je n'ai pas trouvé d'exemples de code avec plusieurs ListeBox.
    Dés que vous essayé d'appliquer l'exemple à votre propre application, c'est beaucoup plus compliqué.
    Pouvez-vous me donner un bout de code pour résoudre mon problème ?
    MERCI d'avance ! A BIENTÔT !

  8. #8
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 881
    Points : 1 544
    Points
    1 544
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par jm-ht Voir le message
    Bonjour,
    Je comprends que je ne sais pas grand chose sur les actions à entreprendre. je n'ai pas pensé à la déclaration "GLOBAL". là, je suis muet !
    c'est pourquoi, je ne demande qu'à apprendre. J'ai déjà essayé du code avec une ListBox (ça fonctionne avec un Print("vous avez cliqué sur:",item). Mais, je n'ai pas trouvé d'exemples de code avec plusieurs ListeBox.
    Dés que vous essayé d'appliquer l'exemple à votre propre application, c'est beaucoup plus compliqué.
    Pouvez-vous me donner un bout de code pour résoudre mon problème ?
    MERCI d'avance ! A BIENTÔT !
    Bonjour,
    En remplaçant tes deux fonctions par une seule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def selarticle_nom(event):
     
        if Lb1.curselection():
            selart = Articles[Lb1.curselection()[0]]
            Lab1.configure(text=selart, bg='silver')
     
        if Lb2.curselection():
            selno = Noms[Lb2.curselection()[0]]
            Lab2.configure(text=selno, bg='skyblue')
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 781
    Points
    36 781
    Par défaut
    Citation Envoyé par jm-ht Voir le message
    Dés que vous essayé d'appliquer l'exemple à votre propre application, c'est beaucoup plus compliqué.
    Pouvez-vous me donner un bout de code pour résoudre mon problème ?
    C'est à vous de construire des exemples qui soient "proches" du cas d'utilisation que vous envisager.
    Ici, 2 listbox et récupérer ce qui est affiché dans chaque commence par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import tkinter as tk
     
    root = tk.Tk()
     
    def display_selection(e):
        print(e.widget, e.widget.selection_get())
     
    for x in range(2):
        lb = tk.Listbox(root) #, exportselection=0)
        lb.insert(0, 1, 2, 3, 4)
        lb.grid(row=0, column=x)
        lb.bind('<<ListboxSelect>>', display_selection)
     
    tk.mainloop()
    Et vous voyez que lorsque vous cliquez sur une Listbox puis sur l'autre, la sélection de la précédente "s'efface" et que le "print" est appelé 2 fois avec la même valeur...

    Puis qu'avec l'option exportselection=0, e.widget.selection_get va planter...

    Apprendre à utiliser un widget, c'est trouver des réponses à ces questions en lisant attentivement la documentation.

    Cela vous permet d'arriver à un code du genre:
    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
    import tkinter as tk
     
    root = tk.Tk()
     
    def display_selection(e):
        w = e.widget
        print(w, w.get(w.curselection()))
     
    for x in range(2):
        lb = tk.Listbox(root, exportselection=0)
        lb.insert(0, 1, 2, 3, 4)
        lb.grid(row=0, column=x)
        lb.bind('<<ListboxSelect>>', display_selection)
     
    tk.mainloop()
    à modifier encore pour être "au plus prêt" de ce que vous voulez faire avec.

    Et vous voyez que ces petits tests "structurent" comment vous allez pouvoir réaliser votre application: on n'est pas dans votre tête et on ne peut pas apprendre à votre place!

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2014
    Messages : 11
    Points : 5
    Points
    5
    Par défaut J'ai modifié mon code avec la solution de Hominidé !
    Bonjour,
    J'avais trouvé des bouts de code que je m'efforçais de greffer sur le mien. J'ai quand même appris qu'il y avait la méthode "Curselection()".
    En effet aux premiers essais les mots choisis tombaient dans les bonnes cases sans écraser la précédente. Puis, j'ai eu des messages du genre (out of range).
    Mais, avec votre coup de pouce, tout rentre dans l'ordre. Je vous remercie beaucoup !!

    VOICI LE NOUVEAU CODE (qui a l'air de fonctionner) J'ai même ajouté la liste des verbes.
    ========================================================
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    # G:/PROGRAMMATION\THONNY IDE\MES PROGRAMMES\PROGRAMMES\python-TKINTER\TKINTERCrazyListboxDansCanvas.py 
    from tkinter import *
    fen = Tk()
    fen.title("ESSAI AVEC CANVAS")
    fen.geometry("600x600")
     
    def selarticle_nom(event):
     
        if Lb1.curselection():
            selart = Articles[Lb1.curselection()[0]]
            Lab1.configure(text=selart, bg='silver')
     
        if Lb2.curselection():
            selnom = Noms[Lb2.curselection()[0]]
            Lab2.configure(text=selnom, bg='skyblue')
     
        if Lb3.curselection():
            selverbe = Verbes[Lb3.curselection()[0]]
            Lab3.configure(text=selverbe, bg='palegreen')
     
    police=("arial",12,"bold")    
    CanPlateau = Canvas(fen, width=500, height=50, bg='burlywood')
    # pour placer le canvas aux coordonnées x,y remplacer monCanvas.pack() par place(x,y)
    CanPlateau.place(x=10,y=150)    # va placer le début du Canvas aux coordonnées (100,100).
     
    Lab1=Label(CanPlateau,text="",font=police,width=12,height=3,relief=RAISED,bg='burlywood')
    Lab1.grid(row=0,column=0)
    Lab2=Label(CanPlateau,text="",font=police,width=12,height=3,relief=RAISED,bg='burlywood')
    Lab2.grid(row=0,column=1)
    Lab3=Label(CanPlateau,text="",font=police,width=12,height=3,relief=RAISED,bg='burlywood')
    Lab3.grid(row=0,column=2)
     
    CanListebox = Canvas(fen, width=500, height=50,bg='pink')
    # pour placer le canvas aux coordonnées x,y remplacer monCanvas.pack() par place(x,y)
    CanListebox.place(x=10,y=400)   # va placer le début du Canvas aux coordonnées (x,y)
    # Listbox Articles
    Articles=["Le","La","Les","Un","Une","Des"]
    nbmots=len(Articles)
    print(nbmots)
    Lb1=Listbox(CanListebox, height=nbmots,width=10, font=police,justify=LEFT,bg="silver")
    for i in range(nbmots):
        Lb1.insert(i,Articles[i])
    Lb1.grid(row=0,column=0)
    Lb1.bind('<<ListboxSelect>>',selarticle_nom)
     
    # Listbox Noms Communs
    Noms=["chien(s)","grenouille(s)","singe(s)","limace(s)","araignée(s)","cloporte(s)","anguille(s)","crevette(s)"]
    nbmots=len(Noms)
    print(nbmots)
    Lb2=Listbox(CanListebox, height=nbmots,width=10, font=police,justify=LEFT,bg="skyblue")
    for i in range(nbmots):
        Lb2.insert(i,Noms[i])
    Lb2.grid(row=0,column=1)
    Lb2.bind('<<ListboxSelect>>',selarticle_nom)
     
    # Listbox Verbes
    Verbes=["mange(nt)","avale(nt)","saute(nt)","grimpe(nt)","attrape(nt)","marche(nt)","donne(nt)","va"]
    nbmots=len(Noms)
    print(nbmots)
    Lb3=Listbox(CanListebox, height=nbmots,width=10, font=police,justify=LEFT,bg="palegreen")
    for i in range(nbmots):
        Lb3.insert(i,Verbes[i])
    Lb3.grid(row=0,column=2)
    Lb3.bind('<<ListboxSelect>>',selarticle_nom)
     
    fen.mainloop()
    Je me suis découragé à plusieurs reprises avant de me décider de vous contacter !
    Merci encore à tous !! j'espère que ça servira à d'autres. Ce n'est quand même pas évident.
    A BIENTÔT ! peut-être. Car mon application n'est pas terminée. Je dois ajouter une BDD Sqlite. Mais,là je penses pouvoir maîtriser.. Quoi que ??

  11. #11
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 881
    Points : 1 544
    Points
    1 544
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par jm-ht Voir le message
    NOUVEAU CODE (qui a l'air de fonctionner)
    =
    Bonjour,

    à noter que le code actuel ne permet pas le choix multiple au sein de la même listbox...
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2014
    Messages : 11
    Points : 5
    Points
    5
    Par défaut Suite de la précédente discussion. Amélioration du programme de jeu de mots
    Bonjour Hominidé,

    Je suis désolé ! J'ai encore besoin de vous !! Dans la version du programme que vous m'avez aidé à coder, j'ai bien compris, aux essais, que je ne pouvais pas écrire un "Articles" dans le Deuxième, troisième label, etc..
    C'est vrai que je me suis aperçu à l'usage que je ne pouvais pas écrire (affecter) sur les labels une phrase du genre: "Une grenouille saute sur un nénuphar et mange une salade." En effet, j'ai utilisé une fois l'Article:Une dans l'ordre des ListBox.
    Ce qui ne me permet pas de réutiliser un Article ou un autre mot (Un Verbe ou autre) d'une autre ListsBox sur un autre Label.Et là, c'est très restrictif. Ce n'est pas le but recherché.
    J'ai analysé votre bout de code avec les IF et je me suis dis que je pourrais affecter n'importe qu'elle Listbox de mots à n'importe quel Label constituant la phrase à construire.
    En un mot, J'aimerais pouvoir mettre n'importe quel mot d'une ListBox sur les Labels dans l'ordre séquentiel sans en sauter un bien sûr.
    Voyez-vous une solution à ce nouveau problème ? En vous servant de la dernière version code du programme ?
    MERCI D'AVANCE !!

  13. #13
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 881
    Points : 1 544
    Points
    1 544
    Billets dans le blog
    4
    Par défaut
    Bonsoir,

    Pourquoi ne pas remplacer tes labels avec le widget Text ?
    Il est plus adapté à ce que tu veux faire . Tu peux notamment coloriser les mots ,
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  14. #14
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 881
    Points : 1 544
    Points
    1 544
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    En regardant ton code, je vois que tu fais un mauvais usage de canvas. Ce n'est pas lui que tu dois utiliser pour déterminer le placement de tes widgets, mais Frame...
    Pour ce qui est de ta demande, utilise un widget Text au lieu de plusieurs Label ...

    Sinon, quelle documentation tkinter utilises tu?
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  15. #15
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 781
    Points
    36 781
    Par défaut
    Salut,

    Citation Envoyé par jm-ht Voir le message
    En un mot, J'aimerais pouvoir mettre n'importe quel mot d'une ListBox sur les Labels dans l'ordre séquentiel sans en sauter un bien sûr.
    Voyez-vous une solution à ce nouveau problème ? En vous servant de la dernière version code du programme ?
    Vous pouvez avoir une liste de Labels et les remplir à la suite (il suffit de savoir le prochain à remplir).
    Vous pourriez aussi utiliser un seul Label (et mettre à jour le texte qu'il contient) ou un widget Text.

    Pour écrire une phrase du genre: "Une grenouille saute sur un nénuphar et mange une salade." on peut supposer que l'utilisateur voudra changer certains mots pendant la saisie.
    Ce qui sera plus compliqué que se contenter d'ajouter du texte (dans un Label à part, dans le même Label ou avec le widget Text).

    2 choses: vous devez réfléchir à ce que vous voulez réaliser avant de partir à coder. Papier, crayon pour imaginer votre interface et les interactions utilisateurs est un boulot qu'on ne peut pas faire pour vous.

    Il en est de même côté "code": vous devez connaître les différents widgets et apprendre à les utiliser pour avoir une idée de ceux à choisir pour coder ce que vous voulez réaliser.

    Et non moins important: la question initiale ayant été marquée "resolue", pourquoi ne pas ouvrir une nouvelle discussion?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  16. #16
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 881
    Points : 1 544
    Points
    1 544
    Billets dans le blog
    4
    Par défaut
    Ayant eu un moment libre, j'ai réécrit le code avec l'utilisation d'un widget text et en proposant une construction de tes listbox via une fonction que j'ai nommé: actions()
    Je joins le 1er jet du code, à titre d'exemple (mais certainement pas exemplaire). Tu pourras peut être t'en inspirer ...


    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    from tkinter import *
    fen = Tk()
    fen.title("ESSAI")
    fen.geometry("600x600")
     
    Articles=["Le","La","Les","Un","Une","Des"]
    Noms=["chien(s)","grenouille(s)","singe(s)","limace(s)",
          "araignée(s)","cloporte(s)","anguille(s)","crevette(s)"]
    Verbes=["mange(nt)","avale(nt)","saute(nt)","grimpe(nt)","attrape(nt)",
            "marche(nt)","donne(nt)","va"]
    police=("arial",12 ,"bold")
     
     
    def actions(types, Lb, row, column):
        for i, typ in enumerate(types):
            Lb.insert(i, typ)
        Lb.grid(row= row, column=column)
        Lb.bind('<<ListboxSelect>>',selarticle_nom)
     
    def selarticle_nom(event):
         if Lb1.curselection():
            selart = Articles[Lb1.curselection()[0]]
            txt.insert("insert", " "+selart, 'montag')
            txt.tag_configure('montag', background="silver")
            Lb1.selection_clear(0,'end')
         elif Lb2.curselection():
            selnom = Noms[Lb2.curselection()[0]]
            txt.insert("insert", " "+selnom, 'montag2')
            txt.tag_configure('montag2', background="skyblue")
            Lb2.selection_clear(0,'end')
         elif Lb3.curselection():
            selverbe = Verbes[Lb3.curselection()[0]]
            txt.insert("insert", " "+selverbe, 'montag3')
            txt.tag_configure('montag3', background="palegreen")
            Lb3.selection_clear(0, 'end')
     
     
    #Création des frames
    framePlateau = Frame(fen, width=500, height=50)
    framePlateau.place(x=10,y=150)
    frameListebox = Frame(fen, width=500, height=50,bg='pink')
    frameListebox.place(x=10,y=400)
    # widget Text et Listbox
    txt = Text(framePlateau, width=50, height=3, bg='burlywood' )
    txt.grid()   
    Lb1=Listbox(frameListebox, height=len(Articles),
                width=10, font=police,justify=LEFT,bg="silver")
    Lb2=Listbox(frameListebox, height=len(Noms),width=10,
                font=police,justify=LEFT,bg="skyblue")
    Lb3=Listbox(frameListebox, height=len(Verbes), width=10,
                font=police,justify=LEFT,bg="palegreen")
     
    #mise en place des Listbox     
    for types,lb, row, column in [(Articles,Lb1,0,0), (Noms,Lb2,0,1), (Verbes,Lb3,0,3)]:
        actions(types, lb, row, column)
     
    fen.mainloop()
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2014
    Messages : 11
    Points : 5
    Points
    5
    Par défaut suite ListBox pour jeu de mots
    Bonjour,

    J'ai rompu la conversation il y a quelques jours parce que j'ai retrouvé et essayé un bout de code "Drag and Drop" de Infoforall.com

    Ma documentation de chevet est le livre de Swinnen, ainsi que la doc officielle et le site (infoforall.com très bien fait, d'un lycée.
    J'étudie souvent le code utilisé dans les exemples. Mais, ils ne correspondent pas vraiment à ce que je veux faire.

    Au départ, c'est un jeu de plateau réel en carton qui se joue à Deux,trois ou Quatre Joueurs. Avec des cases qui servent à construire des phrases avec des points genre "Scrabble".
    Mais, comme le prix de réalisation d'une boîte de jeu complète est exorbitant. Il faut commander 300 pièces à environ 15Euros (4500Euros d'entrée).
    Donc, j'ai eu l'idée de programmer le jeu et essayer de le faire connaître sur la toile. Afin, de financer la réalisation en Boîte. Vous voyez le problème.
    Comme je programme un peu, PHP, HTML(formulaire,Input(text),Select,etc.., Javascript, Pygame, python. j'ai essayé des ébauches du jeu avec tous ces langages. Et je me suis arrêté à Python car il accepte SQLITE et TKINTER qui me parait intéressant avec ses listbox,boutons et Labels.
    Voilà l'histoire !!
    J'ai lu votre dernier message, et je veux bien essayer votre code. Je vous dirai ce que j'en pense.
    Actuellement, je teste l'exemple de "drag and drop" de: https://infoforall.fr/python/python-act280.html. Cet exemple fonctionne bien et me conviendrait, je l'ai adapter avec des mots et les couleurs qui vont avec. Mais, hélas je suis vite bloqué par la compréhension de ce qu'il se passe vraiment. Par exemple, je n'arrive pas à recopier la couleur (bg) qui va avec le texte à Droper (j'obtiens le nom de la couleur.Mais pas la copie des mots). L'exemple infoforall, est en noir et gris et ne recopie que des chiffres. Mais il est quand même très intéressant du point de vue de sa souplesse pour déposer les mot dans les cases du plateau.

    Enfin, Bref ! c'est pas facile ...

    Pour l'instant, je vais tester votre code

    A BIENTÔT !!

  18. #18
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 881
    Points : 1 544
    Points
    1 544
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Citation Envoyé par jm-ht Voir le message
    j'ai eu l'idée de programmer le jeu et essayer de le faire connaître sur la toile
    Je veux bien en savoir plus afin de savoir de quoi on cause . (règles du jeu , visuel , démo...)
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/03/2017, 10h50
  2. sélection de données dans mdb protégé par mot de passe
    Par unja2010 dans le forum Bases de données
    Réponses: 4
    Dernier message: 28/06/2013, 13h01
  3. Réponses: 7
    Dernier message: 26/03/2008, 09h23
  4. [MySQL] Paramètrer ma requete après sélection dans un formulaire
    Par philippef dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 08/11/2006, 13h39
  5. Rediriger vers une page après sélection dans un select
    Par belzeluc dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 07/11/2006, 22h32

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