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 :

Changer completement le contenu d'une frame/panel


Sujet :

wxPython

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Changer completement le contenu d'une frame/panel
    Bonjour,

    Je commence a utiliser WxPython, et j'ai un problème sur les Frames / Panel.
    J'essaye de créer une application simple qui affiche un page d'accueil, puis une autre page quand on clique sur un bouton. J'aimerai que cette autre page soit au final dans la même fenêtre, avec les même menus.

    J'ai créé une Frame principale, qui appelle une classe de type pannel, avec du texte et un bouton. Quand on clique sur celui-ci, un nouveau panel est crée, puis le premier panel s'auto-détruit.

    Le problème est que lorsque je clique sur le bouton, il n'y a pas grand chose qui s'affiche, mais lorsque je redimmentionne la fenêtre, l'affichage est bon.
    J'ai essayé avec les fonctions Refresh et Update, qui ne donnent rien...

    Une Idée?

    Voici mon code :

    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    class Ma_Frame(wx.Frame):
     
        def __init__(self, parent, id, log):
            wx.Frame.__init__(self, parent, id, 'MAT', size=(800, 500))
            self.log = log
            self.CenterOnScreen()
     
            #pour le mettre en grand :
            #self.Maximize(True)
     
            # on lance les menus
            Mes_Menus(self,log)
     
            # on lance l'affichage de la page d'accueil
            Page_Acceuil(self,log)
     
    #---------------------------------------------------------------------------
    class Mes_Menus:
        "Contient les menus"
    	[...] # supprime pour plus de lisibilite
    #---------------------------------------------------------------------------
     
    class Page_Acceuil(wx.Panel):
        def __init__(self,parent,log):
            self.log=log
            self.parent=parent
            wx.Panel.__init__(self, parent, -1)
     
            #Sizer
            sizer_Vertical=wx.BoxSizer(wx.VERTICAL)
     
            #Message d'acceuil
            str="""
    hello
    """
            tc = wx.StaticText(self, -1,str,style=wx.ALIGN_CENTER)
            font=wx.Font(25,wx.FONTFAMILY_DECORATIVE,wx.NORMAL,wx.NORMAL)
            tc.SetFont(font)
            sizer_Vertical.Add(tc,0,wx.ALIGN_CENTER)
     
            b = wx.Button(self, 20, "importer") ##, (120, 45))
            self.Bind(wx.EVT_BUTTON, self.OnClick, b)
            b.SetToolTipString(" Importation des configuration \n depuis un dossier ou un fichier ")
            sizer_Vertical.Add(b,0,wx.ALIGN_CENTER)
     
            #Sizer Vertical
            self.SetSizer(sizer_Vertical)
     
        def OnClick(self,event):
            Page_Acceuil_bis(self.parent,self.log)
            self.Destroy()
     
    #---------------------------------------------------------------------------
    class Page_Acceuil_bis(wx.Panel):
        def __init__(self,parent,log):
            self.log=log
            wx.Panel.__init__(self, parent, -1)
     
            #Sizer
            sizer_Vertical=wx.BoxSizer(wx.VERTICAL)
     
            #Message d'acceuil
            str="""
    test
    """
            tc = wx.StaticText(self, -1,str,style=wx.ALIGN_CENTER)
            font=wx.Font(25,wx.FONTFAMILY_DECORATIVE,wx.NORMAL,wx.NORMAL)
            tc.SetFont(font)
            sizer_Vertical.Add(tc,0,wx.ALIGN_CENTER)
     
     
            #Sizer Vertical
            self.SetSizer(sizer_Vertical)
            parent.Refresh(True)
            parent.Update()
     
    #---------------------------------------------------------------------------
    class Log:
        def WriteText(self, text):
            if text[-1:] == '\n':
                text = text[:-1]
            wx.LogMessage(text)
        write = WriteText
     
    #---------------------------------------------------------------------------
     
    class Run(wx.App):
        def __init__(self):
            wx.App.__init__(self,redirect=False)
            # on veut que les logs aillent sur la console
            wx.Log_SetActiveTarget(wx.LogStderr())
            # creation de la fenetre
            win = Ma_Frame(None,wx.ID_ANY,Log())
            win.Show(True)
     
     
    app=Run()
    app.MainLoop()

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 328
    Points : 240
    Points
    240
    Par défaut
    Bonjour,

    Avant tout, il faut savoir que je suis une biquette en Python (débutant depuis 1 mois), mais tu pourrais peut-être essayer ça :

    A la place de tes Refresh ou Update, essaye Layout()
    Du style :

    sizer_Vertical.Layout()
    ou
    self.Layout()

    Bonne chance ! A+

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci de ta réponse Ggamer!

    Malheureusement, ta solution ne marche pas....

    En fait, j'ai trouvé une "solution". Ce n'est pas très joli, mais ça marche.

    J'avais remarqué que quand je changeais la taille de la fenêtre, tout s'affichait bien. j'ai donc forcé l'application à recharger la fenêtre!

    j'ai rajouté à la fin de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.parent.SendSizeEvent()
    (parent étant la Frame)

    Bon, si quelqu'un a une autre idée, il est le bienvenu, c'est pas si bien que ça comme solution, je corrige les symptomes mais pas les racines du problème !!

Discussions similaires

  1. Newbie: Changer le contenu d'une frame en fonction de la selection
    Par SubwAy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 0
    Dernier message: 12/06/2010, 11h22
  2. Changer le contenu d'une frame au clic sur un hyperlinkbutton
    Par maxwel56 dans le forum Silverlight
    Réponses: 1
    Dernier message: 02/02/2010, 10h30
  3. changer le contenu d'une frame
    Par etudianti4 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/10/2008, 14h09
  4. Récupere contenu d une frame
    Par alexmorel dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 03/03/2006, 14h58
  5. Réponses: 3
    Dernier message: 07/10/2004, 17h02

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