CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Problème py : PIL & Tkinter

Elmohe
Elmohe
Niveau 9
16 mars 2017 à 18:19:42

Bsoir !

Je code depuis peu un RPG et comme je veux que du fait maison je suis en train de faire l'éditeur de niveau (en python pour que ça soit plus simple)
J'en suis à la partie où j'affiche sur un Canvas le bon morceau du tileset que je crop.

J'ai donc ma fonction :

def drawTile(x,y,index,canvas):
    global xt,yt,tk_im
    #On cherche les coordonnées de la tile sur le tileset
    xt = index%tileset_width*tile_size
    yt = index//tileset_width*tile_size
    #On crop le tileset
    tk_im = ImageTk.PhotoImage(tileset.crop((xt,yt,xt+tile_size,yt+tile_size)))
    #Et je crois que le problème est dans l'affichage du tile
    canvas.create_image(tile_size//2+2+x, tile_size//2+2+y,image=tk_im)

Et l'appel à la fonction :

def refreshMap():
    for i in range(map_width):
        for j in range(map_height):
            drawTile(i*tile_size, j*tile_size, map_data[j][i],can)

Je pense que les variables parlent assez bien d'elles-mêmes donc no need de re-taper tout le code.
J'ai fait pleins de tests avec print() et tout paraît normal donc ça se passe bien dans l'affichage (canvas.create_image).
POURTANT cela marche quand je le fais avec un autre canevas.
J'ai un canevas pour afficher la tile active, il affiche bien ce qu'il faut, mais le canevas pour afficher la map ne marche pas du tout.

J'ai besoin d'aide :snif2: !

dark_drow
dark_drow
Niveau 15
16 mars 2017 à 18:39:39

c'est bizzare de faire un rpg sur tkinter... c'est déjà léger pour faire une GUI correcte..

Elmohe
Elmohe
Niveau 9
16 mars 2017 à 18:46:47

Le 16 mars 2017 à 18:39:39 dark_drow a écrit :
c'est bizzare de faire un rpg sur tkinter... c'est déjà léger pour faire une GUI correcte..

J'ai jamais dit que je faisais le RPG sur tkinter ni sur python d'ailleurs ;)
Relis bien le post, c'est seulement l'éditeur que je fais sur tkinter. Le rpg est en sfml ^^

Elmohe
Elmohe
Niveau 9
16 mars 2017 à 20:05:15

Bon problème résolu, je m'explique si jamais quelqu'un passe par ici :
l'option image= de canvas.create_image garde la référence de l'image et donc ne la copie pas, ce qui fait que je ne peux utiliser qu'une seule fois l'image, ici tk_im.
Pour palier à ce problème j'ai donc utilisé une liste et quand je veux ajouter une image je l'ajoute d'abord à la liste avant de linker le dernier élément de la liste à l'image :

def drawTile(x,y,index,canvas):
    global xt,yt,img_list
    xt = index%tileset_width*tile_size
    yt = index//tileset_width*tile_size
    img_list += ImageTk.PhotoImage(tileset.crop((xt,yt,xt+tile_size,yt+tile_size))),
    canvas.create_image(tile_size//2+2+x, tile_size//2+2+y,image=img_list[-1])
Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment