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 valeur d'une entry [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 valeur d'une entry
    Bonjour,

    J'essaye aujourd'hui de créer une mini fenêtre avec deux champs de saisies. Puis lors de la fermeture de celle ci, la fenêtre principale s'ouvre et s’exécute grâce au valeurs inscrite précédemment dans les Entry. Je précise que ce ne sera pas du texte d'inscrit. Des nombres entier. (float)
    J'ai fait ceci pour le moment mais ça ne fonctionne pas :/

    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
    # coding: utf-8
    from tkinter import *
    import tkinter as tk
    from tkinter.messagebox import *
     
    def Appliquer():
        taille_x = float(e1.get())
        taille_y = float(e2.get())
        begin.destroy()
     
    begin = Tk()
    e1 = Entry()
    e2 = Entry()
    e1.pack()
    e2.pack()
    b1 = Button(text='Appliquer', command=Appliquer)
    b1.pack()
     
    main = Tk()
    #Suite du code principal
     
    for ligne in range(taille_y): #Ici, il me dit que taille_y n'est pas défini
        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)
     
    #reste du code
    main.mainloop()
    Voila. J'ai aussi essayer au lieu de faire deux fenetre Tk, de créer une seul fenetre Tk (begin) et ensuite de faire un main = Toplevel(begin)
    Mais bon, sans réel succès.

    Merci.

  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,

    Appliquer étant d'abord une fonction (avant d'être callback), ses variables taille_x et taille_y sont, par défaut, locales et inaccessibles à la ligne 22. Donc çà ne peut pas fonctionner.
    Ouvrir un tuto. et revoir les notions de portée des variables?
    Associer un StringVar à vos Entry pour "contourner" le problème?

    - 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, j'ai utilisé StringVar et Toplevel et ça commence à fonctionner.

    J'indique "commence" car j'ai de nouveau un problème. J'utilise à présent ce 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
    34
    35
    36
    37
    38
    39
    40
    41
    from tkinter import *
     
    def toplevel():
        top=Toplevel(root)
     
        frame = Frame(top)
        frame.pack(padx=10, pady=100)
        can = Canvas(frame, background='yellow')
        can.grid(row=0, column=0)
        frame_b = Frame(can)
     
        #Generation des boutons
        for ligne in range(taille_y):
            for colonne in range(taille_x):
                button = 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) * 20), int((h/taille_y) * 20)
        can.configure(scrollregion=bbox, width=dw, height=dh)    
     
    root=Tk()
    x = StringVar(root)
    y = StringVar(root)
    x.set("10") """Valeur de base"""
    y.set("10") """Valeur de base"""
    E1=Entry(textvariable=x, width=7,justify=CENTER) 
    E2=Entry(textvariable=y, width=7,justify=CENTER) 
    E1.pack(side = RIGHT)
    E2.pack(side = RIGHT)
    go=Button(root, text="lancer", command=toplevel)
    go.pack()
     
    taille_x = int(E1.get())
    taille_y = int(E2.get())
    root.mainloop()
    Seulement, à présent, ma grille prend la forme de base tout le temps (c'est à dire 10x10). Or ce n'est absolument pas ce que je souhaite !
    Pour le moment, ma saisie dans mes deux Entry E1 et E2 n'influence en aucun cas la grille générer lors du clic sur le bouton "go"

    Comment corriger ce problème ? Peu être faut-il que je fasse une update ou quelque chose du style ?

  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
    Citation Envoyé par Tituya Voir le message
    Comment corriger ce problème ? Peu être faut-il que je fasse une update ou quelque chose du style ?
    Essayez de comprendre votre code... pourquoi taille_x et taille_y ne peuvent valoir autre chose que 10? Parce que leur valeur est assignée depuis le contenu des Entry avant qu'elles soient mises à jour...(et les StringVar ne servent à rien dans ce code là).
    Si vous aviez ouvert un tuto. sur tkinter et pris le temps d'apprendre la programmation événementielle, vous auriez moins de soucis pour comprendre comment écrire ce genre de code.

    - 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
    En effet, c'était une erreur absolument minable mais sur le coup, je n'avais pas compris ce qu'il se passait. Problème résolu.

    Le code pour ceux du futur !
    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
    from tkinter import *
     
    def toplevel(): #activé par le bouton
        taille_x = int(E1.get()) #on reprend les valeurs précedentes 
        taille_y = int(E2.get())
        top=Toplevel(root) #Création nouvelle fenetre 
        frame = Frame(top)
        frame.pack(padx=10, pady=100)
        can = Canvas(frame, background='yellow')
        can.grid(row=0, column=0)
        frame_b = Frame(can)
     
        #Generation des boutons
        for ligne in range(taille_y):
            for colonne in range(taille_x):
                button = 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) * 20), int((h/taille_y) * 20)
        can.configure(scrollregion=bbox, width=dw, height=dh)    
     
    root=Tk()
    x = StringVar(root)
    y = StringVar(root)
    x.set("10") #Valeur de base
    y.set("10") #Valeur de base
    E1=Entry(textvariable=x, width=7,justify=CENTER) #Entry 1 gérant x
    E2=Entry(textvariable=y, width=7,justify=CENTER) #Entry 2 gérant y
    E1.pack(side = RIGHT)
    E2.pack(side = RIGHT)
    go=Button(root, text="lancer", command=toplevel) #bouton permettant le lancement de l'app
    go.pack()
     
     
    root.mainloop()

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

Discussions similaires

  1. Récupérer la valeur d'une variable distante
    Par seblo_scoqi dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/09/2005, 16h10
  2. récupérer la valeur d'une checkbox
    Par druglord dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/08/2005, 13h54
  3. Récupérer la valeur d'une adresse hexa 300.
    Par Cochman dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 04/06/2005, 17h45
  4. Réponses: 2
    Dernier message: 29/05/2005, 19h50
  5. [C#] [Automation Word] Récupérer la valeur d'une cellule
    Par Ditch dans le forum Windows Forms
    Réponses: 2
    Dernier message: 16/06/2004, 15h57

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