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 :

debutant essaye tkinter pour passer son petit jeux en mode graphique


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    ouvrier
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : ouvrier
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Par défaut debutant essaye tkinter pour passer son petit jeux en mode graphique
    Bonjour.
    J'essaye d'éclater mon code en morceaux mais je ne comprend pas pourquoi je n'arrive pas à afficher mon sprite du moment que je découpe mon code à l'aide d'une fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    from tkinter import *
     
    def affichage(): 
        photo_wall = PhotoImage(file = "wall.gif")
        can.create_image (0, 0, anchor = NW, image = photo_wall)
     
    fenetre = Tk()
    can = Canvas(fenetre, width=500, height=500)
    can.pack()
     
    affichage()
    fenetre.mainloop
    Merci.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Salut,

    Citation Envoyé par ptitnoob
    je ne comprend pas pourquoi je n'arrive pas à afficher mon sprite du moment que je découpe mon code à l'aide d'une fonction.
    Parce qu'avec Python tout est objet et que certains objets (comme une PhotoImage) doivent avoir une durée de vie supérieure à celle de la fonction qui les crée.
    Le même code, avec une seule ligne déplacée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    from tkinter import *
     
    def affichage(): 
        can.create_image (0, 0, anchor = NW, image = photo_wall)
     
    fenetre = Tk()
    photo_wall = PhotoImage(file = "wall.gif")
    can = Canvas(fenetre, width=500, height=500)
    can.pack()
     
    affichage()
    mainloop()
    fait de "photo_wall" une variable globale. L'objet associé reste référencé qu'affichage soit appelé ou pas.

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

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    ouvrier
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : ouvrier
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Par défaut merci
    J'avais essayé plusieurs choses mais à force je me suis un peut perdu.
    je voulais retourné à la fin de la fonction mon objet mais je ne savais pas ce qu'il fallait renvoyer exactement.
    Du coup grâce à ta réponse j'ai pu voir comment restructurer le code comme je voulais le faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    from tkinter import *
     
    def affichage(): 
     
        photo_wall = PhotoImage(file = "wall.gif")
        can.create_image (0, 0, anchor = NW, image = photo_wall)
        return ({"wall" : photo_wall})
    fenetre = Tk()
     
    can = Canvas(fenetre, width=500, height=500)
    can.pack()
    fenetre.mainloop
     
    (photos) = affichage()

  4. #4
    Membre émérite
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Par défaut
    Citation Envoyé par ptitnoob Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    from tkinter import *
     
    def affichage(): 
     
        photo_wall = PhotoImage(file = "wall.gif")
        can.create_image (0, 0, anchor = NW, image = photo_wall)
        return ({"wall" : photo_wall})
    fenetre = Tk()
     
    can = Canvas(fenetre, width=500, height=500)
    can.pack()
    fenetre.mainloop
     
    (photos) = affichage()
    Bonsoir,
    Ainsi que l'avait corrigé wiztricks, le "fenetre.mainloop" est une méthode: elle prend une paire de parenthèses.
    Que signifie: "(photos) = affichage()"
    Les parenthèses n'ont pas de sens (et elles n'ont aucun intérêt).
    D'autre part, cette instruction est située après l'affichage graphique (lancé par "fenetre.mainloop()").
    (à la sortie de "mainloop", les objets "tkinter" sont tous détruits)

    Clodion

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    ouvrier
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : ouvrier
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Par défaut merci
    Oui j'ai oublié les parenthèses pour mainloop(), en faite je commence à voir pour l'interface graphique et la gestion d'événement.
    J'ai suivi des tutos et j'essaye d'éclater mon code et de comprendre le fonctionnement.
    Mais ça coince quand je le découpe.

    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
    from tkinter import * # importation de tkinter
    fenetre = Tk() # création de la fenêtre graphique
    fenetre.title("GAME")
     
    size_sprite = 30 # définit la taille des sprites
    nb_sprite_w = 15
    nb_sprite_h = 15
     
    w_fenetre = nb_sprite_w * size_sprite
    h_fenetre = nb_sprite_h * size_sprite
    can = Canvas(fenetre, width = w_fenetre, height = h_fenetre, bg = "white")
     
    def clavier(event):
        touche = event.keysym
        if touche == 'a':
            print("good")
        else:
            print(touche)
     
    # contenant le niveaux
    lab = [
        "###############",
        "#  #  #     # #",
        "#  ## #-###-# #",
        "#  |    #     #",
        "#-#######     #",
        "#  #    #     #",
        "#  #    #     #",
        "#  ##-###     #",    
        "#             #",
        "#             #",
        "#             #",    
        "#             #",  
        "#             #",
        "#             #",
        "################"
        ]
     
    # chargement des sprites
    photo_wall = PhotoImage(file = "wall.gif") 
    photo_hero = PhotoImage(file = "hero.gif")
     
    n_ligne = 0 # création d'un compteur pour connaitre le n° ligne   
    for ligne in lab:
        n_colonne = 0 # création d'un compteur pour pour connaitre le n° colonne
        for case in ligne:
        # Murs
            if case == "#":
                can.create_image(n_colonne * size_sprite,
                                     n_ligne * size_sprite, anchor = NW,
                                     image = photo_wall)
     
     
            n_colonne += 1 # incrementation compteur n° ligne
        n_ligne += 1       # incrementation compteur n° colonne
     
        # affichage du personnage
        sprite_hero = can.create_image(pos_perso[0] * size_sprite,
                                     pos_perso[0] * size_sprite, anchor = NW,
                                     image = photo_hero)
     
        can.focus_set()
        can.pack () # Positionnement du canevas dans la fenêtre principal 
     
     
    ######################
    # Initialisation jeu #
    ######################
    perso = "x"
    pos_perso = [1, 1]
     
     
     
     
    can.bind("<Key>", clavier)    
    fenetre.mainloop ()
    fenetre.destroy ()

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    ouvrier
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : ouvrier
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Par défaut la j'essaye de le découper
    Merci pour vos réponses.

Discussions similaires

  1. Collaboration pour création de petits jeux
    Par Xydwix dans le forum Unity
    Réponses: 5
    Dernier message: 26/05/2015, 23h28
  2. Moyens minimum pour un accès via ssh en mode graphique - X11 - à un serveur
    Par FrancisGernet dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 17/12/2014, 04h26
  3. petit jeux pour essayer
    Par phoenix_91 dans le forum VB.NET
    Réponses: 19
    Dernier message: 10/06/2007, 23h06
  4. Réponses: 9
    Dernier message: 12/03/2007, 16h09
  5. [debutant] pour debbuger un petit prog avec menu
    Par niluge01 dans le forum Windows
    Réponses: 3
    Dernier message: 22/11/2003, 15h03

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