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 :

Grille de mots croisés


Sujet :

Tkinter Python

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut Grille de mots croisés
    Bonjour,

    j'ai un code qui me donne un quadrillage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    from tkinter import *
    # fenêtre Tkinter
    fenetre=Tk()
    fenetre.title("Quadrillage")
    Terrain=Canvas(fenetre,height=600,width=600)
    Terrain.pack()
    carreau=[[Terrain.create_rectangle(i*60,j*60,(i+1)*60,(j+1)*60, tags='RRR', fill="#FFFFFF")
                                            for i in range(10)] for j in range(10)]
    fenetre.mainloop()
    Je voudrai pouvoir afficher un texte dans les cases, et je voudrai que les noms des colonnes et les noms des lignes apparaissent sur les côtés. Pourriez-vous m'aider à faire cela svp? Merci d'avance de votre aide.

    Cordialement,
    Arsène

  2. #2
    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 778
    Points
    36 778
    Par défaut
    Salut,

    Citation Envoyé par Arsene12 Voir le message
    Je voudrai pouvoir afficher un texte dans les cases
    Pour afficher du texte dans un Canvas, c'est .create_text

    Citation Envoyé par Arsene12 Voir le message
    , et je voudrai que les noms des colonnes et les noms des lignes apparaissent sur les côtés.
    Ce qui peut se traduire par l'ajout de lignes et de colonnes supplémentaires remplies de façon particulière.

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

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    J'avais essayé Terrain.itemconfigure(carreau[i][j], create_text="TEXTE"), ça me donne rien;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i in range(4):
        for j in range(4):
           #Terrain.itemconfigure(carreau[i][j],create_text="TEXTE")
           Terrain.create_text(carreau[i][j],"TEXTE")
    
    tkinter.TclError: bad screen distance "TEXTE"

  4. #4
    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 778
    Points
    36 778
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    J'avais essayé Terrain.itemconfigure(carreau[i][j], create_text="TEXTE"), ça me donne rien
    Cà donne un message d'erreur:

    Citation Envoyé par Arsene12 Voir le message
    tkinter.TclError: bad screen distance "TEXTE"
    Et comme dans la documentation donnée dans le message précédent, çà dit:
    Vous pouvez modifier ou récupérer le texte affiché:

    Pour récupérer le texte d’un tel item d’identifiant id sur un canevas can, utiliser can.itemcget(id, 'text').
    Pour remplacer le texte d’un tel item par une chaîne ch, utiliser can.itemconfigure(id, text=ch).
    difficile de croire que vous avez pris la peine de la lire.

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

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    En fait je tâtonne, un peu au hasard. J'ai essayé divers codes qui n'ont pas marché, dont ceux-là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    Terrain.itemconfigure(carreau[i][j], text="TEXTE")
    Terrain.fillText("Texte",i,j)
    ...
    
    Pour le premier code, je suis la consigne :
    
    Pour remplacer le texte d’un tel item par une chaîne ch, utiliser :  
    
    can.itemconfigure(id, text=ch)
    Saurie-vous quel id je dois utiliser?

  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 778
    Points
    36 778
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    Saurie-vous quel id je dois utiliser?
    L'identifiant numérique retourné par le .create_...

    Citation Envoyé par Arsene12 Voir le message
    En fait je tâtonne, un peu au hasard.
    Il faut apprendre à lire une documentation (même écrite en français).
    Le Canvas (comme le widget Text) est un des plus difficiles car très versatile.
    Pour votre grille, vous pourriez vous contenter de Label et de Button et les placer avec .grid. Ça serait peut être plus simple.

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

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    J'aimerai bien savoir comment on fait pour placer les labels à l’intérieur des carreaux.

    Le problème reste le même.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    test = Label(carreau[1][1], text="test", bg='red')
    test.grid()

  8. #8
    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 778
    Points
    36 778
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    J'aimerai bien savoir comment on fait pour placer les labels à l’intérieur des carreaux.
    Si vous écrivez des lignes de code sans trop comprendre ce qu'elles ont faire, "j'aimerai bien savoir" commence par la lecture d'un tuto. sur tkinter (une lecture attentive s'entends i.e. en réfléchissant aux concepts présentés, en essayant de faire les exercices proposés et pas juste y rechercher le bout de code qui le ferait peut être), puis la lecture de code déjà écrits par d'autres. Dans la FAQ vous avez cet exemple assez similaire.

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

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Merci pour tous ces exemples. Je sais maintenant positionner un texte à l'intérieur d'un canvas.

    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
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    from tkinter import *
     
    # on crée la fenêtre principale
    fenetre = Tk()
     
    # options de texte
    txt_options = dict(
        text="Hello, world!",
        font="sans 16 bold",
        fill="indian red",
    )    
     
    j = 1
    while j < 4:
        i=1
        while i < 4:
            canvas = "canvas" + str(i)
            canvas = Canvas(fenetre, bg="pale goldenrod", width=200, height=200)
            canvas.create_text(100, 100, **txt_options)
            canvas.grid(row=j, column=i, sticky=NW+SE)
            i=i+1
        j=j+1
     
    # on lance la boucle principale
    fenetre.mainloop()
    Par contre, je constate qu'il est difficile de positionner un texte en le centrant à l'intérieur d'un rectangle.


    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
    from tkinter import *
     
    from tkinter import filedialog, ttk
    # fenêtre Tkinter
    fenetre=Tk()
     
    fenetre.title("Quadrillage")
    Terrain=Canvas(fenetre,height=600,width=600)
    Terrain.pack()
    carreau=[[Terrain.create_rectangle(i*60,j*60,(i+1)*60,(j+1)*60, fill="#FFFFFF")
                                            for i in range(10)] for j in range(10)]
    texte=[[
              Terrain.create_text(i*60, j*60, text = "mon TEXTE", font = ("Purisa", 12), anchor = "nw")
                                            for i in range(10)] for j in range(10)]
     
    #Terrain.create_text(105, 105, text = "mon TEXTE", font = ("Purisa", 12), anchor = "nw")
    #mylabel = Terrain.create_text((40, 19), text="Label text")
     
    fenetre.mainloop()
    J'ai créé un quadrillage qui est composé de canvas dans lesquels j'ai mis un label :

    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
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    from tkinter import *
     
    # on crée la fenêtre principale
    fenetre = Tk()
     
    def clic(event):
     label.config(bg="gray")
     
    j = 1
    while j < 10:
        i=1
        while i < 10:
            canvas = "canvas" + str(i) + str(j)
            canvas = Canvas(fenetre, bg="pale goldenrod")
            canvas.grid(row=j, column=i, sticky=NW+SE)
            label = "label" + str(i) + str(j)
            label = Label(canvas, bg="pale goldenrod", text="VRAI", width=10, height=5, borderwidth=2, relief="solid")
            label.grid(row=j, column=i, sticky=NW+SE)
     
            i=i+1
        j=j+1
     
    fenetre.bind("<Button-1>", clic)
     
    # on lance la boucle principale
    fenetre.mainloop()

    J'ai fait ensuite un code qui permet de modifier la couleur du label lorsqu'on y clique dessus :

    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
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    from tkinter import *
     
    # on crée la fenêtre principale
    fenetre = Tk()
     
    # on définit l'action du click
    def clic(event,arg):
     print(arg)
     arg.config(bg="gray")
     
    j = 1
    while j < 10:
        i=1
        while i < 10:
            canvas = "canvas" + str(i) + str(j)
            print(canvas)
            canvas = Canvas(fenetre, bg="pale goldenrod")
            canvas.grid(row=j, column=i, sticky=NW+SE)
            label = "label" + str(i) + str(j)
            label = Label(canvas, bg="#8FCF3C", text="VRAI", width=10, height=5, borderwidth=2, relief="solid")        
            label.grid(row=j, column=i, sticky=NW+SE)
            label.bind("<Button-1>", lambda event, arg=label: clic(event, arg))
            i=i+1
        j=j+1
     
    # on lance la boucle principale
    fenetre.mainloop()

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

Discussions similaires

  1. [Free Pascal] Jeu de mots croisés
    Par Alcatîz dans le forum Codes sources à télécharger
    Réponses: 4
    Dernier message: 22/02/2015, 22h00
  2. Algorithme générateur de grille de mots croisés
    Par houssine91 dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 23/07/2013, 00h38
  3. Mots croisés, mots fléchés ou sudokus
    Par rambc dans le forum jQuery
    Réponses: 9
    Dernier message: 21/04/2011, 23h16
  4. Génération de grilles de mots
    Par mavina dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 05/02/2008, 19h44
  5. [JavaScript] [SRC] Aide aux mots-croisés
    Par Bisûnûrs dans le forum Contribuez
    Réponses: 14
    Dernier message: 22/12/2006, 04h39

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