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

Python Discussion :

Problème texte/image sur Tkinter


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Problème texte/image sur Tkinter
    Bonjour,

    Etant novice en programmation, je voudrais savoir comment faire pour afficher une image ou un texte lors de chaque clic sur un même bouton c'est à dire si je clique une fois sur le bouton "suivant" (par exemple) l'image 1 ou texte 1 s'affiche, si je clique une seconde fois elle disparaît et l'image 2 ou texte 2 la remplace et etc.... tout ceci avec Tkinter.

    J'ai déjà créer un petit programme qui est le suivant :

    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
    from Tkinter import *
    import random
    def intro():#
     
        BoutonLancer.forget()
        BoutonContinuer = Button(Mafenetre, text='Go', command=debut)
        BoutonContinuer.pack(side = BOTTOM, padx = 380, pady = 5)
        msg.pack(side = BOTTOM)
     
     
    def debut():
        msg.forget()
        msg2 = Label(Mafenetre, text='Bonjour')
        msg2.config(font=('courier', 20, 'bold'))
        msg2.config(bg='black', fg='red')
        msg2.config(height=800, width=600)
        msg2.pack(side = BOTTOM)
     
    Mafenetre = Tk()
    Mafenetre.title('Survival Z')
    Mafenetre.geometry('800x600') #création de la fenetre
    BoutonLancer = Button(Mafenetre, text ='Jouer', command=intro, image="")
    BoutonLancer.pack(side = RIGHT, padx = 380, pady = 5)#création du bouton jouer
    msg = Label(Mafenetre, text='Bienvenue en Enfer')
    msg.config(font=('courier', 20, 'bold'))
    msg.config(bg='black', fg='red')
    msg.config(height=800, width=600)

    Dans mon programme, si je définis une autre fonction ou variable (excusez moi si je ne connais pas les bon termes) par exemple "début1" et que je la met après "début" et que je change juste le texte (pour les différencier) alors rien ne se passe juste "intro" et "début" s'affiche.

    Voilà, dites moi si je me suis mal exprimé, en espérant une réponse au plus vite.
    Merci d'avance ^^

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Points : 482
    Points
    482
    Par défaut
    Bonjour,

    Il manque Mafenetre.mainloop() à la fin du code pour que la fenêtre s'affiche.

    Voici un exemple avec le déroulement d'une simple liste :

    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
    # -*- coding: utf-8 -*-
    # Python 2
     
    from Tkinter import *
     
    scenario_texte = [
            'Bonjour',
            'mon premier scénario !',
            'Au revoir',
    ]
     
    num_scenario = 0
     
    def intro():
            global msg, BoutonLancer, BoutonContinuer
     
            BoutonLancer.forget()
            BoutonContinuer = Button(Mafenetre, text='Go', command=suivant)
            BoutonContinuer.pack(side = BOTTOM, padx = 380, pady = 5)
            msg.pack(side = BOTTOM)
     
    def suivant():
            global msg, num_scenario, BoutonContinuer
     
            msg.config(text=scenario_texte[num_scenario])
            num_scenario += 1
     
            if (num_scenario >= len(scenario_texte)): # La dernière planche est passée
                    BoutonContinuer.config(text='Quitter')
                    BoutonContinuer.config(command=Mafenetre.destroy) # Ferme la fenêtre
     
    Mafenetre = Tk()
    Mafenetre.title('Survival Z')
    Mafenetre.geometry('800x600') # création de la fenetre
    BoutonLancer = Button(Mafenetre, text ='Jouer', command=intro, image="")
    BoutonLancer.pack(side = RIGHT, padx = 380, pady = 5) # création du bouton jouer
    msg = Label(Mafenetre, text='Bienvenue en Enfer')
    msg.config(font=('courier', 20, 'bold'))
    msg.config(bg='black', fg='red')
    msg.config(height=800, width=600)
    Mafenetre.mainloop()
    Explication :
    La variable/liste scenario_texte contient les différents textes à balayer en cliquant sur BoutonContinuer.

    intro() et suivant() étant des fonctions, toutes les variables qui sont crées dedans seront locales, non-globales, non-accessible depuis une autre fonction ou depuis le main.

    Toutes les variables déclarées dans le main sont globales, le fait d'appeler une ces variables dans une fonction déclare implicitement (sans besoin de le préciser) qu'elle est globale (et retourne une erreur si elle n'existe pas déjà), mais elle n'est pas modifiable.

    Une déclaration globale implicite est risquée dans le cas où on modifie cette variable avant de la lire, dans ce cas la fonction créer une nouvelle variable, ce ne sera pas la même que la globale !

    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
    # -*- coding: utf-8 -*-
    # Python 2
     
    ma_variable = 1
     
    def ma_fonction_un():
            ma_variable = 2 # Déclaration locale
            print(ma_variable)
     
    def ma_fonction_deux():
            global ma_variable # Déclaration explicite globale
            ma_variable = 3
            print(ma_variable)
     
    def ma_fonction_trois():
            print(ma_variable) # Implicitement globale
            # ma_variable = 4 # Retournera une erreur sur l'appel au dessus : UnboundLocalError: local variable 'ma_variable' referenced before assignment
     
    ma_fonction_un() # Affichera 2
    print(ma_variable) # Affichera 1
    ma_fonction_deux() # Affichera 3
    print(ma_variable) # Affichera 3
    ma_fonction_trois() # Affichera 3


    Si tu souhaites faire évoluer ton code manuellement depuis la console tu peux faire Ctrl+C pour arrêter le mainloop, puis le relancer avec Mafenetre.mainloop() ou sinon faire un Mafenetre.update(), mais il faut le faire à chaque interaction.


    Pour utiliser les images, de ce que j'ai compris sous Python 2, la librairie Tkinter se limite au GIF !
    Il faut donc utiliser la librairie PIL (Python Imaging Library) pour pouvoir utiliser les autres formats.

    Mais le plus simple si tu débutes serait de passer sous Python 3, beaucoup plus simple à utiliser et c'est surtout l'avenir du langage.

    Ça donnerait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # Python 3
     
    from tkinter import ttk
    import tkinter
    racine= tkinter.Tk()
     
    photo = tkinter.PhotoImage(file="image.png")
    labl = tkinter.ttk.Label(racine, image=photo)
    labl.pack()
    bouton_sortir = tkinter.ttk.Button(racine, text="Sortir", command=racine.destroy)
    bouton_sortir.pack()
    racine.mainloop()

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Merci d'avoir résolu mon problème YCL-1 !!

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

Discussions similaires

  1. Problème d'images sur Dreamweaver
    Par petit_kaikai dans le forum Dreamweaver
    Réponses: 0
    Dernier message: 20/11/2008, 17h47
  2. Problème affichage image sur N95
    Par dams95190 dans le forum Développement Mobile en Java
    Réponses: 6
    Dernier message: 10/09/2008, 15h38
  3. Réponses: 2
    Dernier message: 30/11/2006, 10h22
  4. [débutant] problème d'image sur une form
    Par Anthony17 dans le forum Delphi
    Réponses: 3
    Dernier message: 21/11/2006, 14h49

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