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

wxPython Discussion :

afficher une image sur une image de fond


Sujet :

wxPython

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 62
    Points : 44
    Points
    44
    Par défaut afficher une image sur une image de fond
    Bonjour,

    je voudrais après le déclenchement de l'évènement du menu 3joueurs (OnJ3) charger une nouvelle image de fond avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    imgplateau = wx.Image("zeplateau.gif", wx.BITMAP_TYPE_ANY)
    bg0=wx.StaticBitmap(self,-1,wx.BitmapFromImage(imgplateau))
    puis la première carte que je voudrais afficher sur ce fond d'image avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bg1=wx.StaticBitmap(self,-1,wx.BitmapFromImage(imgplateau))
    pour afficher la carte dessus. Pas moyen je ne vois pas comment 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
    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
    #!/usr/bin/python
    # -*- coding: cp1252 -*-
    from os import chdir
    chdir("C:/Fk/Programmation/Python")
    import wx
     
    class Accueil(wx.Frame):
        def __init__(self, parent, id, title):
            wx.Frame.__init__(self, parent, id, title)
            #p=wx.Panel(self)
            self.CreateStatusBar()
            toolbar = self.CreateToolBar()
            toolbar.Realize()
            menu = wx.Menu()
            J3oueurs = menu.Append(-1, "&3 Joueurs", "jeu pour 2 joueurs contrôlés par l'ordinateur et un joueur humain")
            self.Bind(wx.EVT_MENU, self.OnJ3, J3oueurs)
            J4oueurs = menu.Append(-1, "&4 Joueurs", "jeu pour 3 joueurs contrôlés par l'ordinateur et un joueur humain")
            J5oueurs = menu.Append(-1, "&5 Joueurs", "jeu pour 4 joueurs contrôlés par l'ordinateur et un joueur humain")
            menu.AppendSeparator()
            exit = menu.Append(-1, "&Quitter", "quitter Zetarot")
            self.Bind(wx.EVT_MENU, self.OnQuitter, exit)
            menuBar=wx.MenuBar()
            menuBar.Append(menu, "Menu")
            self.SetMenuBar(menuBar)
            imgaccueil = wx.Image("zetarot page accueil 1280-827-24bits.jpg", wx.BITMAP_TYPE_ANY)
            bg=wx.StaticBitmap(wx.Panel(self),-1,wx.BitmapFromImage(imgaccueil))
            self.Maximize()
            self.Show(True)
        def OnQuitter(self, event):
            self.Close()
     
        def OnJ3(self, event):
            p=wx.Panel(Accueil)
            imgplateau = wx.Image("zeplateau.gif", wx.BITMAP_TYPE_ANY)
            bg0=wx.StaticBitmap(self,-1,wx.BitmapFromImage(imgplateau))
            imcarte1 = wx.Image("atout n°1.gif", wx.BITMAP_TYPE_ANY)
            bg1=wx.StaticBitmap(self,-1,wx.BitmapFromImage(imgplateau))
     
    app = wx.App()
    Accueil(None, -1, '  ZeTarot')
    app.MainLoop()
    François

  2. #2
    Membre averti
    Avatar de Alain_72
    Inscrit en
    Août 2004
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 180
    Points : 342
    Points
    342
    Par défaut
    Tu ne peux pas superposer des images de cette façon.
    Si tu veux faire un jeu en python, utilise plutôt pygame.

    Cependant, si tu veux absolument utiliser wxPython, je t'ai fait un petit exemple simple de la façon de procéder pour superposer des images. Tout se situe dans la méthode OnPaint() de l'aire de jeu (un contrôle personnalisé réalisé par héritage du wx.Window).

    Attention il faut que tu récupères les fichiers images que j'ai mis en pièce jointe et que tu les places dans le même répertoire que l'exemple.

    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
    #! /usr/bin/env python
    #-*- coding: utf-8 -*-
     
    import wx
    from random import sample
     
    class AireDeJeu(wx.Window):
        def __init__(self, parent):
            wx.Window.__init__(self, parent, -1, size=(150, 150))
            self.IsObject = False
            self.background = wx.Bitmap("backgrnd.png", wx.BITMAP_TYPE_PNG)
            self.object = wx.Bitmap("objet.png", wx.BITMAP_TYPE_PNG)
     
            self.Bind(wx.EVT_PAINT, self.OnPaint)
     
        def OnPaint(self, event):
            dc = wx.PaintDC(self)
            dc.Clear()
            dc.DrawBitmap(self.background, 0, 0, False)
            if self.IsObject:
                posX, posY = sample(range(118), 2)
                dc.DrawBitmap(self.object, posX, posY, True)
     
        def ObjectOrNot(self, IsObject):
            self.IsObject = IsObject
            self.Refresh()
     
    class FrameTest(wx.Frame):
        def __init__(self):
            wx.Frame.__init__(self, None, -1, title=u"Test aire de jeu")
            panel = wx.Panel(self, -1)
            sizer0 = wx.BoxSizer(wx.VERTICAL)
            sizer1 = wx.BoxSizer(wx.HORIZONTAL)
            self.aire = AireDeJeu(panel)
            sizer0.Add(self.aire, 0, wx.ALIGN_CENTER|wx.ALL, 10)
            self.btPoser = wx.Button(panel, -1, "Poser un objet")
            self.btRetirer = wx.Button(panel, -1, "retirer l'objet")
            self.btRetirer.Enable(False)
            btQuitter = wx.Button(panel, -1, "Quitter")
            sizer1.Add(self.btPoser, 1, wx.ALL, 3)
            sizer1.Add(self.btRetirer, 1, wx.ALL, 3)
            sizer1.Add(btQuitter, 1, wx.ALL, 3)
            sizer0.Add(sizer1, 0, wx.ALL, 5)
            panel.SetSizer(sizer0)
            panel.Fit()
            self.Fit()
     
            self.Bind(wx.EVT_BUTTON, self.Poser, self.btPoser)
            self.Bind(wx.EVT_BUTTON, self.Retirer, self.btRetirer)
            self.Bind(wx.EVT_BUTTON, self.Quitter, btQuitter)
            self.Bind(wx.EVT_CLOSE, self.Quitter)
     
        def Poser(self, event):
            self.btPoser.Enable(False)
            self.aire.ObjectOrNot(True)
            self.btRetirer.Enable(True)
     
        def Retirer(self, event):
            self.btRetirer.Enable(False)
            self.aire.ObjectOrNot(False)
            self.btPoser.Enable(True)
     
        def Quitter(self, event):
            self.Destroy()
     
    class MyApp(wx.App):
        def OnInit(self):
            f = FrameTest()
            f.Show(True)
            self.SetTopWindow(f)
            return True
     
    app = MyApp()
    app.MainLoop()
    Images attachées Images attachées   
    Je ne traite pas les problèmes techniques par MP...
    Les forums sont là pour ça...

    Les contributions du bipede

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 62
    Points : 44
    Points
    44
    Par défaut
    Merci beaucoup Alain ,

    C'est exactement ce que je voulais faire. Je vais étudier ton code de très près. J'avais cherché pas mal de temps sur le net sans rien trouver sur ce sujet.
    J'adopte le serpent, il me plait bien
    J'hésite pour pygame. Je veux juste poser les cartes de mon jeu de tarot. Cela ne nécessite pas grand chose au niveau du visuel, à part de mettre les images des cartes sur le background et de les retirer.

    François

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

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. Recuperer une valeur dans une grille sur une image
    Par gwal21 dans le forum Images
    Réponses: 3
    Dernier message: 26/02/2011, 23h41
  3. [Débutant] Afficher sur une succession de fichiers images .tif une mesure de force
    Par afortiori dans le forum MATLAB
    Réponses: 48
    Dernier message: 23/07/2010, 15h15
  4. Réponses: 3
    Dernier message: 15/04/2009, 07h30
  5. Afficher la valeur d'une cellule sur une image
    Par alex830001 dans le forum Excel
    Réponses: 2
    Dernier message: 02/07/2008, 11h07

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