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 :

Variable dans une fenêtre Tkinter


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Variable dans une fenêtre Tkinter
    Bonjour à tous, j'ai besoin de votre aide pour finaliser mon projet d'isn (ou plutôt le réaliser).
    Voilà, mon but est de réaliser un programme réalisant un tableau à la Dubuffet.
    Mis à part la tache graphique, ma tache personelle est de faire l'interface graphique, où l'utilisateur fera son travail d'artiste. Mais comme Tkinter répète en boucle mon programme, je ne sais pas comment initialiser une variable, car si je mets par exemple

    Variable = 1
    Variable = variable + 1

    à la fin du programme, elle se réinitialise. Du coup j'en appelle à vous, car mes enseignants ont beau tenter de m'expliquer, ils ont eux-même du mal à réaliser cette tache. J'espère avoir réussi à bien expliquer mon problème. Voici mon code actuel, mais il est extrêmement variable car je ne trouve pas de solution.
    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
     
    from tkinter import *
    from tkinter.filedialog import *
    import os
     
     
     
    def chemin():
        filepath = askopenfilename(title="Ouvrir une image",filetypes=[('png files','.png'),('all files','.*')])
    def afficher():
        canvas = Canvas(width=photo.width(), height=photo.height(), bg="blue")
        canvas.create_image(10,10, anchor=NW, image=photo)
        canvas.pack()
     
    fen=Tk()
    open = Button(fen,text ="ouvrir une image", command = afficher)
    filepath=chemin()
    photo = PhotoImage(file=filepath)
    open.pack()
    fen.mainloop()
    Merci d'avance pour votre aide!

  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 wazo_qui_vole Voir le message
    Mais comme Tkinter répète en boucle mon programme, je ne sais pas comment initialiser une variable, car si je mets par exemple

    Variable = 1
    Variable = variable + 1

    à la fin du programme, elle se réinitialise.
    A la fin du programme tout sera détruit sauf à sauvegarder des données dans un fichier externe. Maintenant, ce que vous voulez faire n'est peut être pas çà, d'autant que votre code ne contient pas la fameuse "Variable".

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

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Tout d'abord, merci de votre réponse,mais quand vous parlez d'à la fin du programme, c'est quand on ferme la fernêtre? Je ne parle pas de ça, mais par exemple, j'aimerais savoir comment afficher un tout simple compteur de clics. Si on fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    from tkinter import *
    def add():
         count  = count +1
    count=1
    fen=Tk()
    Label(fen,text=count).pack()
    open = Button(fen,text ="ouvrir une image", command = add)
    open.pack
    fen.mainloop()
    la variable count se réinitialisera a chaque instant, puisque que mainloop réitère le programme tant que la fenêtre existera. Et donc cela n'affichera en permanence "1". (et en plus la il y a un problème d'assignement je comprends pas ça m'énerve )

  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
    Salut,

    Citation Envoyé par wazo_qui_vole Voir le message
    Si on fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    from tkinter import *
    def add():
         count  = count +1
    count=1
    fen=Tk()
    Label(fen,text=count).pack()
    open = Button(fen,text ="ouvrir une image", command = add)
    open.pack
    fen.mainloop()
    Déjà, votre programme n'affiche pas le Button. Cela corrigé çà plante avec un message d'erreur que vous devriez reconnaître car on ne débute pas sur Python en se lançant sur tkinter.


    Citation Envoyé par wazo_qui_vole Voir le message
    la variable count se réinitialisera a chaque instant, puisque que mainloop réitère le programme tant que la fenêtre existera.
    .mainloop attend juste qu'un évènement déclenche une action qui se traduira par l'appel d'une fonction qui pourra modifier l'état des variables globales et mettre à jour l'affichage si nécessaire (ici le Label).

    Citation Envoyé par wazo_qui_vole Voir le message
    Et donc cela n'affichera en permanence "1". (et en plus la il y a un problème d'assignement je comprends pas ça m'énerve )
    La portée des variables, variable locales, globales,... sont des notions importantes si vous ne les maîtrisez pas, il faut prendre le temps d'apprendre sinon vous allez être vite perdu et ne saurez pas que faire.

    Sinon avec tkinter, on va pouvoir écrire cela ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import tkinter as tk
     
    root = tk.Tk()
    var = tk.IntVar()
    tk.Label(root, textvariable=var).pack()
    tk.Button(text='clic', command=lambda: var.set(var.get()+1)).pack()
    tk.mainloop()
    et les explications se trouvent dans les tutos (que vous êtes supposé avoir potassé avant de poster).

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

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Bonjour, merci de m'avoir aidé, et oui j'ai potassé et je ne suis pas (en tout cas pas censé être) un débutant, mais c'est mon premier programme sur Tkinter, et j'avoue que le fonctionnement de cette librairie me travaille un peu. Merci d'avoir répondu, je vais essayer de me servir de ça pour mon programme, mon prof avait évoqué lambda juste avant de finir le cours, mais je n'avais pas réussi à comprendre la différence entre "lambda: xxx" et "def truc ():" merci!

  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 wazo_qui_vole Voir le message
    je vais essayer de me servir de ça pour mon programme, mon prof avait évoqué lambda juste avant de finir le cours, mais je n'avais pas réussi à comprendre la différence entre "lambda: xxx" et "def truc ():" merci!
    Dans le cas particulier "lambda" est juste là pour ne pas definir une fonction. On pourrait écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def do_clic():
        var.set(var.get()+1)
     
    root = tk.Tk()
    var = tk.IntVar()
    tk.Label(root, textvariable=var).pack()
    tk.Button(root, text='clic', command=do_clic).pack()
    tk.mainloop()
    Si vous voulez en savoir plus, vous avez un bon tuto ici.

    Et si vous étiez moins débutant vous auriez pu écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def do_clic():
        global counter
        counter += 1
        label['text'] = counter
     
     
    root = tk.Tk()
    counter = 0
    label = tk.Label(root, text=counter)
    label.pack()
    tk.Button(text='clic', command=do_clic).pack()
    tk.mainloop()
    Citation Envoyé par wazo_qui_vole Voir le message
    jet oui j'ai potassé et je ne suis pas (en tout cas pas censé être) un débutant, mais c'est mon premier programme sur Tkinter, et j'avoue que le fonctionnement de cette librairie me travaille un peu.
    C'est pour çà qu'on a écrit des tutos.

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

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Bonjour, j'ai compris ce que je voulais, c'était créer une variable "vide" pour pouvoir la remplir avec la fonction en utilisant set. Mais existe-t-il une chose de ce type pour les PhotoImage? Car j'aimerais déclarer la variable puis la remplir avec mon bouton, c'est sûrement possible mais je ne vois pas comment

  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 wazo_qui_vole Voir le message
    Bonjour, j'ai compris ce que je voulais, c'était créer une variable "vide" pour pouvoir la remplir avec la fonction en utilisant set. Mais existe-t-il une chose de ce type pour les PhotoImage?
    Pas du côté des "variables" tkinter en tous cas.

    Citation Envoyé par wazo_qui_vole Voir le message
    Car j'aimerais déclarer la variable puis la remplir avec mon bouton, c'est sûrement possible mais je ne vois pas comment
    Mais avec une variable Python... peut être que....
    Je vous ai déjà donné 3 exemples de code, si vous ne savez pas les lire... difficile de penser à comment les adapter à autre chose.
    Mais si vous vouliez débuter par le début, vous arriveriez sans soucis non seulement à exprimer ce que vous voulez mais aussi le traduire en Python.... Wouah

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

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    J'ai compris vos exemples, sauf que, pour rappel, mon but est d'afficher une image auparavant choisie grâce à l'explorateur de fichier. Pour l'instant, mon code ressemble à:
    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
    from tkinter import *
    import os
    from tkinter.filedialog import *
     
    def ouvrir():
        filepath.set(askopenfilename(title="Ouvrir une image",filetypes=[('png files','.png'),('all files','.*')]))
        photo = PhotoImage(file=filepath)
        canvas = Canvas(width=photo.width(), height=photo.height(), bg="blue")
        canvas.create_image(0,0, anchor=NW, image=photo)
        canvas.pack()
     
    fen=Tk()
    filepath =StringVar()
    photo = Var()
    open = Button(fen,text ="ouvrir une image", command = ouvrir)
    open.pack()
    fen.mainloop()

    Sauf qu'il me dit que la variable photo n'est pas déclarée. Donc comment la déclarer? Je pensais avoir la solution en demandant avec un Int mais ça ne s'adapte pas, donc je vous repose la question autrement. Je suis désolé de vous casser autant les pieds mais je ne comprends pas Mais prenez bien compte que je lis et comprends chacuns de vos codes et que je vous remercie pour votre aide.

  10. #10
    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 wazo_qui_vole Voir le message
    Sauf qu'il me dit que la variable photo n'est pas déclarée. Donc comment la déclarer?
    Le code que vous avez posté devrait planter à l'instruction photo = Var() avec un message d'erreur que vous devriez bien connaître: NameError.

    Citation Envoyé par wazo_qui_vole Voir le message
    Mais prenez bien compte que je lis et comprends chacuns de vos codes et que je vous remercie pour votre aide.
    Pour l'instant, vous êtes si peu familier avec Python que vous ne savez pas trop lire les erreurs qu'il remonte...

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

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Le code que vous avez posté devrait planter à l'instruction photo = Var() avec un message d'erreur que vous devriez bien connaître: NameError.
    Justement, je cherche un remplaçant à cette ligne, car sinon la variable n'est pas déclarée.

  12. #12
    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 wazo_qui_vole Voir le message
    Justement, je cherche un remplaçant à cette ligne, car sinon la variable n'est pas déclarée.
    Comment peut bien se déclarer une variable Python?
    Si la réponse n'est pas dans votre tuto, changez de tuto!
    Vous avez le Swinnen pour les très débutants et le tuto qui vient avec Python pour les autres.
    Il y a des chapitres entiers sur les variables...

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

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Alors euh pour les swinnen pourquoi pas l'année prochaine, mais là il me reste une semaine pour finir mon projet et je n'arrive pas à ouvrir une image. Si j'avais le temps j'aurai demandé à mes professeurs mais je fais appel à vous car vous êtes mieux qualifiés et j'arrive rapidement à l'échéance. Nous n'avons pas fait beaucoup de python avant. Notre premier mini projet se résumait à changer une image de couleur (changer les octets par d'autres, rien de dur) et là on me lache du nid avec tkinter à maîtriser et un cours où l'on ne m'apprends que les bases fondamentales (aucun canvas, aucun .pack, bref juste de quoi créer une fenêtre avec un bouton et du texte). Du coup non je ne comprends pas comment transformer ma PhotoImage en quelque chose d'autre pour la déclarer .

Discussions similaires

  1. Variable dans une fenêtre appellante
    Par Anduriel dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 07/08/2012, 14h51
  2. Passage de variable dans une fenêtre modale
    Par arthuro45 dans le forum jQuery
    Réponses: 5
    Dernier message: 25/03/2011, 08h34
  3. Réponses: 5
    Dernier message: 18/06/2008, 09h50
  4. passage de variables dans une fenêtre popup
    Par Invité dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/04/2007, 09h59
  5. Affichage variable dans une fenêtre d'alerte
    Par undercrash dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 08/03/2006, 21h35

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