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 :

Récupérer la couleur d'un bouton pour trouver sa localisation [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2018
    Messages : 14
    Points : 10
    Points
    10
    Par défaut Récupérer la couleur d'un bouton pour trouver sa localisation
    J'ai continué mon projet d'interface pour calculatrice. Voila pour le moment ce que j'ai.
    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    # coding: utf-8
    from tkinter import *
    import tkinter as tk
    from tkinter.messagebox import *
     
    main = Tk()
    main.title('1er version')
    main['bg'] = '#abc'
    nomfichier = 'CasioMaker.txt'
    main.resizable(width=False,height=False)
     
    #A propos de l'affichage
    taille_x = 127
    taille_y = 63
    disp_x = 10
    disp_y = 10
     
    def a(): 
        #Ecriture dans le fichier
        fichier = open(nomfichier, 'w')
        fichier.write('\'Made by Tituya\n')
        fichier.write('Cls\n')
        fichier.write('ViewWindow 1,127,1,1,63,1\n')
        fichier.write('AxesOff\n')
        fichier.close()
     
    def c(): #Reset de la grille
        for ligne1 in range(taille_y):
            for colonne1 in range(taille_x):
                button = tk.Button(frame_b, borderwidth=1, background='white', width=2, height=1)
                button['command'] = lambda button=button: button.configure(background = 'black')
                button.grid(row=ligne1, column=colonne1)
     
    def b(): #Lors du quit
        if askyesno('Titre 1', 'Etes vous sur ? Toutes progression sera effacée'):
            main.destroy()
        else:
            pass
     
    #Image CasioMaker
    photo = PhotoImage(file="ma_photo.png")
    frametxt = Frame(main, relief=FLAT)
    frametxt.pack(side=TOP)
    cantxt = Canvas(frametxt, width=300, height=25, bg=main['bg'], relief=FLAT)
    cantxt.create_image(150, 12, anchor=CENTER, image=photo)
    cantxt.pack(side=TOP)
     
    frame = Frame(main)
    frame.pack(padx=10, pady=100)
    can = Canvas(frame, background='yellow')
    can.grid(row=0, column=0)
     
    #Barre vertical
    vsbar = Scrollbar(frame, orient=VERTICAL, command=can.yview)
    vsbar.grid(row=0, column=1, sticky=NS)
    can.configure(yscrollcommand=vsbar.set)
    #Barre horizontal
    hsbar = Scrollbar(frame, orient=HORIZONTAL, command=can.xview)
    hsbar.grid(row=1, column=0, sticky=EW)
    can.configure(xscrollcommand=hsbar.set)
     
    frame_b = Frame(can)
     
    #Generation des boutons
    for ligne in range(taille_y):
        for colonne in range(taille_x):
            button = tk.Button(frame_b, borderwidth=1, background='white', width=2, height=1)
            button['command'] = lambda button=button: button.configure(background = 'black')
            button.grid(row=ligne, column=colonne)
     
    can.create_window((0,0), window=frame_b, anchor=NW)
    frame_b.update_idletasks()
    bbox = can.bbox(ALL)
     
    w, h = bbox[2]-bbox[1], bbox[3]-bbox[1]
    dw, dh = int((w/taille_x) * disp_x), int((h/taille_y) * disp_y)
    can.configure(scrollregion=bbox, width=dw, height=dh)
     
    #Menu du haut
    menu = Menu(main)
    sousmenu = Menu(menu, tearoff=0)
    menu.add_cascade(label="Menu", menu=sousmenu)
    sousmenu.add_command(label="Creer le fichier texte", command=a)
    sousmenu.add_command(label="Quitter", command=b)
    menu.add_command(label="Effacer", command=c)
    main.config(menu = menu)
     
    #Faux ecran de calc
    bottom_frame = Frame(main)
    bottom_frame.pack( side = BOTTOM )
     
    canvas = Canvas(bottom_frame, width=127, height=63, background='#7E9658')
    canvas.pack( side = BOTTOM)
     
    main.mainloop()
    Ce qui donne ceci à l'ecran.
    Nom : Capture.PNG
Affichages : 1440
Taille : 33,1 Ko

    Le rendu est pas trop mal je trouve.

    Seulement, malgré cet interface, le code ne fonctionne pas du tout ! Mon but est de détecter la couleur d'un bouton noir pour ensuite récupérer sa position (1,1 pour en bas a gauche et 127,63 pour en haut a droite).

    Pour ceci, j'ai besoin de savoir quel bouton est appuyé.

    Aussi, comme vous l'aurez remarqué, j'ai un espace vert en dessous de ma fenetre. Cet espace, je l'ai créer pour faire une sorte de visualisation de l'ensemble. Donc il faudrait que lors de l'ajout d'un bouton noir, ce canvas localise et replace au pixel notre "dessin".

    Je ne sais absolument pas si mon projet est possible ou si il est réalisable avec de grandes difficultés. Mais peu importe, après tout, c'est surtout pour apprendre que je fais ceci

    Dans l'attente de vos réponses

    Cordialement.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 329
    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 329
    Points : 36 848
    Points
    36 848
    Par défaut
    Salut,

    Citation Envoyé par Tituya Voir le message
    Seulement, malgré cet interface, le code ne fonctionne pas du tout ! Mon but est de détecter la couleur d'un bouton noir pour ensuite récupérer sa position (1,1 pour en bas a gauche et 127,63 pour en haut a droite).

    Pour ceci, j'ai besoin de savoir quel bouton est appuyé.
    Vous avez un exemple similaire dans la FAQ qui vous sera peut être utile.

    - W

  3. #3
    Membre à l'essai
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2018
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Merci
    A présent, j'ai réussi à trouver la position x,y des boutons dans la grille en utilisant ceci :
    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
    # coding: utf-8
    from tkinter import *
    import tkinter as tk
    from tkinter.messagebox import *
     
    main = Tk()
    main.title('1er version')
    main['bg'] = '#abc'
    nomfichier = 'CasioMaker.txt'
    main.resizable(width=False,height=False)
     
    main.bind("<Button-1>", mouse)
     
    def mouse(event):
        grid_info = event.widget.grid_info()
        print("Ligne:", grid_info["row"] + 1, "Colonne:", grid_info["column"] + 1)
    Mais bon, c'est très bien mais à présent, que faire de ces valeurs ? puis-je les utiliser pour ajouter un pixel dans le canvas vert ?
    De plus, en appuyant sur mes deux scrollebar, ce code m'affiche les deux valeurs de localisation de celle ci. Or je n'en ai pas besoin. Pouvons nous essayer de désactiver ceci ?

    Cordialement.

    EDIT

    J'ai ceci pour incruster un point dans un canevas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    from tkinter import * 
     
    HEIGHT = 63 + 1
    WIDTH = 127 + 1
     
     
    root = Tk()
     
    canvas = Canvas(root, width=127, height=63, bg='yellow')
    point = canvas.create_line(WIDTH, HEIGHT, WIDTH, HEIGHT + 1)
    canvas.pack()
     
    root.mainloop()
    Seulement, a présent, il faudrait que j'arrive à donner les valeurs a Height et Width par rapport a Row et column.

    EDIT 2

    J'ai réussi à faire ce que je souhaitait pour le petit écran vert du bas.
    Seulement, j'ai un problème, à présent, je dois écrire dans le fichier texte les coordonnées. J'utilise donc ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fichier = open(nomfichier, 'w')
        fichier.write(posx)
        fichier.write(posy)
     
    posx = canvas.grid_info["row"] + 1
    posy = canvas.grid_info["column"] + 1
    mais cela ne fonctionne pas ;/

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 329
    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 329
    Points : 36 848
    Points
    36 848
    Par défaut
    Salut,

    Citation Envoyé par Tituya Voir le message
    Mais bon, c'est très bien mais à présent, que faire de ces valeurs ? puis-je les utiliser pour ajouter un pixel dans le canvas vert ?
    De plus, en appuyant sur mes deux scrollebar, ce code m'affiche les deux valeurs de localisation de celle ci.
    Le dernier code que vous avez posté:
    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
    # coding: utf-8
    from tkinter import *
    import tkinter as tk
    from tkinter.messagebox import *
     
    main = Tk()
    main.title('1er version')
    main['bg'] = '#abc'
    nomfichier = 'CasioMaker.txt'
    main.resizable(width=False,height=False)
     
    main.bind("<Button-1>", mouse)
     
    def mouse(event):
        grid_info = event.widget.grid_info()
        print("Ligne:", grid_info["row"] + 1, "Colonne:", grid_info["column"] + 1)
    ne contenant ni Canvas, ni Scrollbar, ni Button,... pas facile de comprendre où vous voulez en venir, ni le rapport avec la question initiale.

    - W

  5. #5
    Membre à l'essai
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2018
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par wiztricks Voir le message

    ne contenant ni Canvas, ni Scrollbar, ni Button,... pas facile de comprendre où vous voulez en venir, ni le rapport avec la question initiale.

    - W
    En effet, ceci n'a plus de rapport avec la question initialement posée. A présent j'en ai une autre. Dois-je refaire un sujet dessus en posant la question ou alors dois-je plutôt évoquer la question ici sachant qu'elle concerne le même projet ?

    (Pour info, la question c'est ca : Comment écrire dans un fichier texte des données de localisation d'une grille de bouton ?) Sachant que j'ai déjà le moyen de savoir la localisation. Je ne sais juste pas comment faire pour l'écrire.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 329
    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 329
    Points : 36 848
    Points
    36 848
    Par défaut
    Salut,

    Citation Envoyé par Tituya Voir le message
    Dois-je refaire un sujet dessus en posant la question ou alors dois-je plutôt évoquer la question ici sachant qu'elle concerne le même projet ?
    Pour faire simple, dans le forum Python vous posez des questions sur Python et dans le forum tkinter des questions sur tkinter. Sûr que vous utilisez ces outils pour réaliser un "projet" mais... on s'en fout un peu.
    Pour raconter les choses un peu différemment, imaginez que vous construisiez une maison en bois (plutôt que tkinter/Python). Les techniques de constructions avec du bois sont sans rapport avec le nombre de pièces de la maison, la taille du salon.... et applicables à la construction de plusieurs type de maisons (applications).
    Et c'est aussi parce que les soucis que vous rencontrez sont indépendants de votre projet que çà va pouvoir intéresser ce qui savent pour y répondre et ceux qui savent moins pour apprendre.

    - W

  7. #7
    Membre à l'essai
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2018
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    D'accord, merci grandement. Je passe le sujet en résolu.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/02/2010, 14h24
  2. [XL-2003] bouton pour trouver l'emplacement d'un fichier
    Par NovVba dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/06/2009, 12h39
  3. Réponses: 5
    Dernier message: 22/11/2007, 16h48
  4. Réponses: 4
    Dernier message: 23/07/2007, 13h38

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