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 :

Items des menus restants à la recharge d'une Frame


Sujet :

wxPython

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 4
    Par défaut Items des menus restants à la recharge d'une Frame
    bon alors voila je viens de parcourir le livre wxptyhon in action
    et j'ai commencé un petit programme.
    Or quand je change dans les menus les items precedents (listes,bouttons) restent ...
    J'aimerai une frame vierge a chaque debut de menu.
    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
     
    import wx,psycopg
    class Bonjour(wx.Frame):
        ID_IMPORT = 100
        ID_WORK = 101
        ID_EXPORT = 102
        ID_DELETE = 103
        ID_INITIALISATION = 201
        ID_HELP = 301
     
        def __init__(self, titre):
            wx.Frame.__init__(self,parent= None,id = -1,title = titre, size = (400, 400))
            self.conteneur = wx.Panel(self, -1,size = self.GetClientSize())
            self.etiquette = wx.StaticText(self.conteneur, -1,"Bonjour tout le monde !",style = wx.ALIGN_CENTRE)
            self.etiquette.CentreOnParent()
            wx.EVT_SIZE(self,self.OnSize)
            menuBase = wx.Menu()
            menuBase.Append(self.ID_IMPORT, "&Importer un Fichier \tctrl+i")
            menuBase.Append(self.ID_WORK, "&Travailler sur une base \tctrl+t")
            menuBase.Append(self.ID_EXPORT, "&Exporter une base \tctrl+e")
            menuBase.Append(self.ID_DELETE, "&Detruire une base \tctrl+d")
            menuDouchette = wx.Menu()
            menuDouchette.Append(self.ID_INITIALISATION, "&Initialiser\tctrl+N")
            menuAide = wx.Menu()
            menuAide.Append(self.ID_HELP, "&Afficher la Doc\tctrl+A")
            menuBarre = wx.MenuBar()
            menuBarre.Append(menuBase,"&Base")
            menuBarre.Append(menuDouchette,"&Douchette")
            menuBarre.Append(menuAide,"&?")
            self.SetMenuBar(menuBarre)
            wx.EVT_MENU(self,self.ID_IMPORT,self.OnImport)
            wx.EVT_MENU(self,self.ID_WORK,self.OnWork)
            wx.EVT_MENU(self,self.ID_DELETE,self.OnDelete)
        def OnImport(self,evt):
            dlg = wx.FileDialog(self, message="choisissez un fichier .csv", defaultDir=".",defaultFile="",wildcard="*.csv",style=wx.OPEN)
            if dlg.ShowModal() == wx.ID_OK:
                self.fliename = dlg.GetPath()
            dlg.Destroy()
        def OnWork(self,evt):
             requete = "select id,NomOperation,Date from operations"
             conn = psycopg.connect("user=i password=l6 host=192.168 dbname=i")
             curs = conn.cursor()
             curs.execute(requete)
             rows = curs.fetchall()
             conn.close()
             liste = []
             for i in range(len(rows)):
                 liste.append("""Numero : %s Operation : %s Date : %s""" %(rows[i][0],rows[i][1],rows[i][2]))
             self.listBox = wx.ListBox(self.conteneur,-1,(20,20),(300,80),liste,wx.LB_SINGLE)
             self.listBox.CentreOnParent()
     
        def OnDelete(self,evt):
             requete = "select id,NomOperation,Date from operations"
             conn = psycopg.connect("user=o password=y host=192.168 dbname=i")
             curs = conn.cursor()
             curs.execute(requete)
             rows = curs.fetchall()
             conn.close()
             liste = []
             for i in range(len(rows)):
                 liste.append("""Numero : %s Operation : %s Date : %s""" %(rows[i][0],rows[i][1],rows[i][2]))
             self.listBox = wx.ListBox(self.conteneur,-1,(20,20),(300,80),liste,wx.LB_SINGLE)
             self.listBox.CentreOnParent()
             self.button = wx.Button(self.conteneur,-1,"Detruire",pos=(50,300))
             self.listBox.SetSelection(1)
             print self.listBox.GetStringSelection()
        def OnSize(self,evt):
            self.SetTitle("Exemple 3 %s " % evt.GetSize() )
            self.conteneur.SetSize(self.GetClientSize())
            self.etiquette.CentreOnParent()
    class MonApp(wx.App):
        def OnInit(self):
             fen = Bonjour("Exemple 1")
             fen2 = Bonjour("Exemple 2")
             fen.Show(True)
             fen2.Show(True)
             self.SetTopWindow(fen)
             return True
    app = MonApp()
    app.MainLoop()
    Merci de votre aide
    Cordialement
    Bussiere

  2. #2
    Membre expérimenté
    Avatar de Alain_72
    Inscrit en
    Août 2004
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 180
    Par défaut
    Le mieux c'est de construire un panel pour chaque ensemble de contrôles que tu veux faire apparaître, et de détruire le panel en place à chaque appel de menu, pour le remplacer par celui désiré.

    Je t'ai fait un exemple basé sur ton code (j'ai enlevé les appels posgreSQL, pour ne pas devoir me fabriquer une table).

    Tu peux voir que j'ai fait 3 classes supplémentaires dérivées de wx.Panel qui représentent chacune le groupe de contrôle à afficher selon le menu.

    Observe au passage comment j'opère le passage de la liste résultant de ta requête au panel voulu, et comment je gère les redimensionnements.

    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
    99
    100
    101
    102
    103
    104
    #! /usr/bin/env python
    #-*- coding: utf-8 -*-
     
    import wx
     
    ID_IMPORT = 100
    ID_WORK = 101
    ID_EXPORT = 102
    ID_DELETE = 103
    ID_INITIALISATION = 201
    ID_HELP = 301
     
    class PanelBonjour(wx.Panel):
    	def __init__(self, parent):
    		wx.Panel.__init__(self, parent, -1)
    		self.SetSize(parent.GetClientSize())
    		self.etiquette = wx.StaticText(self, -1,"Bonjour tout le monde !",style = wx.ALIGN_CENTRE)
    		self.etiquette.CentreOnParent()
     
    		wx.EVT_SIZE(self,self.OnSize)
     
    	def OnSize(self, evt):
    		self.etiquette.CentreOnParent()
     
    class PanelWork(wx.Panel):
    	def __init__(self, parent, liste):
    		wx.Panel.__init__(self, parent, id = -1)
    		self.SetSize(parent.GetClientSize())
    		self.listBox = wx.ListBox(self,-1,(20,20),(300,80),liste,wx.LB_SINGLE)
    		self.listBox.CentreOnParent()
     
    		wx.EVT_SIZE(self,self.OnSize)
     
    	def OnSize(self, evt):
    		self.listBox.CentreOnParent()
     
    class PanelDelete(wx.Panel):
    	def __init__(self, parent, liste):
    		wx.Panel.__init__(self, parent, id = -1)
    		self.SetSize(parent.GetClientSize())
    		self.listBox = wx.ListBox(self,-1,(20,20),(300,80),liste,wx.LB_SINGLE)
    		self.listBox.CentreOnParent()
    		self.button = wx.Button(self,-1,"Detruire",pos=(50,300))
    		self.listBox.SetSelection(1)
     
    		wx.EVT_SIZE(self,self.OnSize)
     
    	def OnSize(self, evt):
    		self.listBox.CentreOnParent()	
     
    class Bonjour(wx.Frame):
    	def __init__(self, titre):
    		wx.Frame.__init__(self,parent= None,id = -1,title = titre, size = (400, 400))
    		self.conteneur = PanelBonjour(self)
    		wx.EVT_SIZE(self,self.OnSize)
    		menuBase = wx.Menu()
    		menuBase.Append(ID_IMPORT, "&Importer un Fichier \tctrl+i")
    		menuBase.Append(ID_WORK, "&Travailler sur une base \tctrl+t")
    		menuBase.Append(ID_EXPORT, "&Exporter une base \tctrl+e")
    		menuBase.Append(ID_DELETE, "&Detruire une base \tctrl+d")
    		menuDouchette = wx.Menu()
    		menuDouchette.Append(ID_INITIALISATION, "&Initialiser\tctrl+N")
    		menuAide = wx.Menu()
    		menuAide.Append(ID_HELP, "&Afficher la Doc\tctrl+A")
    		menuBarre = wx.MenuBar()
    		menuBarre.Append(menuBase,"&Base")
    		menuBarre.Append(menuDouchette,"&Douchette")
    		menuBarre.Append(menuAide,"&?")
    		self.SetMenuBar(menuBarre)
    		wx.EVT_MENU(self,ID_IMPORT,self.OnImport)
    		wx.EVT_MENU(self,ID_WORK,self.OnWork)
    		wx.EVT_MENU(self,ID_DELETE,self.OnDelete)
     
    	def OnImport(self,evt):
    		dlg = wx.FileDialog(self, message="choisissez un fichier .csv", defaultDir=".",defaultFile="",wildcard="*.csv",style=wx.OPEN)
    		if dlg.ShowModal() == wx.ID_OK:
    			self.fliename = dlg.GetPath()
    		dlg.Destroy()
     
    	def OnWork(self,evt):
    		self.conteneur.Destroy()
    		liste = ["Numero : 1 Operation : op1 Date : 16/07/2006", "Numero : 2 Operation : op2 Date : 17/07/2006"]
    		self.conteneur = PanelWork(self, liste)
    		self.conteneur.SetSize(self.GetClientSize())
     
    	def OnDelete(self,evt):
    		self.conteneur.Destroy()
    		liste = ["Numero : 1 Operation : op1 Date : 16/07/2006", "Numero : 2 Operation : op2 Date : 17/07/2006"]
    		self.conteneur = PanelDelete(self, liste)
    		self.conteneur.SetSize(self.GetClientSize())
     
    	def OnSize(self,evt):
    		self.SetTitle("Exemple 3 %s " % evt.GetSize() )
    		self.conteneur.SetSize(self.GetClientSize())
     
    class MonApp(wx.App):
    	def OnInit(self):
    		fen = Bonjour("Exemple 1")
    		fen.Show(True)
    		self.SetTopWindow(fen)
    		return True
     
    app = MonApp()
    app.MainLoop()

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 4
    Par défaut
    Citation Envoyé par Alain_72
    Le mieux c'est de construire un panel pour chaque ensemble de contrôles que tu veux faire apparaître, et de détruire le panel en place à chaque appel de menu, pour le remplacer par celui désiré.

    Je t'ai fait un exemple basé sur ton code (j'ai enlevé les appels posgreSQL, pour ne pas devoir me fabriquer une table).

    Tu peux voir que j'ai fait 3 classes supplémentaires dérivées de wx.Panel qui représentent chacune le groupe de contrôle à afficher selon le menu.

    Observe au passage comment j'opère le passage de la liste résultant de ta requête au panel voulu, et comment je gère les redimensionnements.

    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
    99
    100
    101
    102
    103
    104
    #! /usr/bin/env python
    #-*- coding: utf-8 -*-
     
    import wx
     
    ID_IMPORT = 100
    ID_WORK = 101
    ID_EXPORT = 102
    ID_DELETE = 103
    ID_INITIALISATION = 201
    ID_HELP = 301
     
    class PanelBonjour(wx.Panel):
    	def __init__(self, parent):
    		wx.Panel.__init__(self, parent, -1)
    		self.SetSize(parent.GetClientSize())
    		self.etiquette = wx.StaticText(self, -1,"Bonjour tout le monde !",style = wx.ALIGN_CENTRE)
    		self.etiquette.CentreOnParent()
     
    		wx.EVT_SIZE(self,self.OnSize)
     
    	def OnSize(self, evt):
    		self.etiquette.CentreOnParent()
     
    class PanelWork(wx.Panel):
    	def __init__(self, parent, liste):
    		wx.Panel.__init__(self, parent, id = -1)
    		self.SetSize(parent.GetClientSize())
    		self.listBox = wx.ListBox(self,-1,(20,20),(300,80),liste,wx.LB_SINGLE)
    		self.listBox.CentreOnParent()
     
    		wx.EVT_SIZE(self,self.OnSize)
     
    	def OnSize(self, evt):
    		self.listBox.CentreOnParent()
     
    class PanelDelete(wx.Panel):
    	def __init__(self, parent, liste):
    		wx.Panel.__init__(self, parent, id = -1)
    		self.SetSize(parent.GetClientSize())
    		self.listBox = wx.ListBox(self,-1,(20,20),(300,80),liste,wx.LB_SINGLE)
    		self.listBox.CentreOnParent()
    		self.button = wx.Button(self,-1,"Detruire",pos=(50,300))
    		self.listBox.SetSelection(1)
     
    		wx.EVT_SIZE(self,self.OnSize)
     
    	def OnSize(self, evt):
    		self.listBox.CentreOnParent()	
     
    class Bonjour(wx.Frame):
    	def __init__(self, titre):
    		wx.Frame.__init__(self,parent= None,id = -1,title = titre, size = (400, 400))
    		self.conteneur = PanelBonjour(self)
    		wx.EVT_SIZE(self,self.OnSize)
    		menuBase = wx.Menu()
    		menuBase.Append(ID_IMPORT, "&Importer un Fichier \tctrl+i")
    		menuBase.Append(ID_WORK, "&Travailler sur une base \tctrl+t")
    		menuBase.Append(ID_EXPORT, "&Exporter une base \tctrl+e")
    		menuBase.Append(ID_DELETE, "&Detruire une base \tctrl+d")
    		menuDouchette = wx.Menu()
    		menuDouchette.Append(ID_INITIALISATION, "&Initialiser\tctrl+N")
    		menuAide = wx.Menu()
    		menuAide.Append(ID_HELP, "&Afficher la Doc\tctrl+A")
    		menuBarre = wx.MenuBar()
    		menuBarre.Append(menuBase,"&Base")
    		menuBarre.Append(menuDouchette,"&Douchette")
    		menuBarre.Append(menuAide,"&?")
    		self.SetMenuBar(menuBarre)
    		wx.EVT_MENU(self,ID_IMPORT,self.OnImport)
    		wx.EVT_MENU(self,ID_WORK,self.OnWork)
    		wx.EVT_MENU(self,ID_DELETE,self.OnDelete)
     
    	def OnImport(self,evt):
    		dlg = wx.FileDialog(self, message="choisissez un fichier .csv", defaultDir=".",defaultFile="",wildcard="*.csv",style=wx.OPEN)
    		if dlg.ShowModal() == wx.ID_OK:
    			self.fliename = dlg.GetPath()
    		dlg.Destroy()
     
    	def OnWork(self,evt):
    		self.conteneur.Destroy()
    		liste = ["Numero : 1 Operation : op1 Date : 16/07/2006", "Numero : 2 Operation : op2 Date : 17/07/2006"]
    		self.conteneur = PanelWork(self, liste)
    		self.conteneur.SetSize(self.GetClientSize())
     
    	def OnDelete(self,evt):
    		self.conteneur.Destroy()
    		liste = ["Numero : 1 Operation : op1 Date : 16/07/2006", "Numero : 2 Operation : op2 Date : 17/07/2006"]
    		self.conteneur = PanelDelete(self, liste)
    		self.conteneur.SetSize(self.GetClientSize())
     
    	def OnSize(self,evt):
    		self.SetTitle("Exemple 3 %s " % evt.GetSize() )
    		self.conteneur.SetSize(self.GetClientSize())
     
    class MonApp(wx.App):
    	def OnInit(self):
    		fen = Bonjour("Exemple 1")
    		fen.Show(True)
    		self.SetTopWindow(fen)
    		return True
     
    app = MonApp()
    app.MainLoop()
    hé bhé purée ...
    Merci énormément
    Bussiere
    je vais etudier ca en profondeur
    encore énormement merci

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 4
    Par défaut hum ....
    je vais t'ennuyer encore désole mais la je bloque,
    dans panelwork j'aimerai que si une personne clique sur le bouton cela detruise le conteneur et que je puisse le remplir.
    en gros refaire un sous menu en detruisant conteneur et en le remplissant par autre chose.
    En gros j'aimerais passer le parent a la methode Onclick pour pouvoir faire un truc du genre :
    def Onclick(self,evt):
    parent.conteneur.Destroy()
    parent.conteneur = Panelwork1
    mais j'ai un peu de mal avec l'héritage ...
    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
     
    class PanelWork(wx.Panel):
        def __init__(self, parent, liste):
            wx.Panel.__init__(self, parent, id = -1)
            self.test = 0
            self.SetSize(parent.GetClientSize())
            self.listBox = wx.ListBox(self,-1,(20,20),(300,80),liste,wx.LB_SINGLE)
            self.listBox.CentreOnParent()
            self.button = wx.Button(self,-1,"Travailler",pos=(50,300))
            self.listBox.SetSelection(1)
            self.item = self.listBox.GetStringSelection()
            self.button.Bind(wx.EVT_BUTTON, self.Onclick)
            wx.EVT_SIZE(self,self.OnSize)                        
     
        def OnSize(self, evt):
            self.listBox.CentreOnParent()
        def Onclick(self,evt):
            parent.conteneur.Destroy()
    edit :
    j'ai trouvé 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
     
    class PanelWork(wx.Panel):
        def __init__(self, parent, liste):
            wx.Panel.__init__(self, parent, id = -1)
            self.test = 0
            self.SetSize(parent.GetClientSize())
            self.listBox = wx.ListBox(self,-1,(20,20),(300,80),liste,wx.LB_SINGLE)
            self.listBox.CentreOnParent()
            self.button = wx.Button(self,-1,"Travailler",pos=(50,300))
            self.listBox.SetSelection(1)
            self.item = self.listBox.GetStringSelection()
    //la par contre c'est le flou artistique total
            self.Bind(wx.EVT_BUTTON,lambda evt = wx.EVT_BUTTON,par = parent : self.Onclick(evt,parent),self.button)
            wx.EVT_SIZE(self,self.OnSize)                        
     
        def OnSize(self, evt):
            self.listBox.CentreOnParent()
        def Onclick(self,evt,parent):
    //la je comprends a peu pres 
            parent.conteneur.Destroy()
            parent.conteneur = PanelWork1(parent)
    j'aimerais bien si possible une explication du pourquoi du comment ca marche ce truc ?
    Merci
    Bussiere

  5. #5
    Membre expérimenté
    Avatar de Alain_72
    Inscrit en
    Août 2004
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 180
    Par défaut
    Si tu veux recréer une instance de classe depuis une autre instance de la même classe tout en détruisant l'ancienne, c'est possible, mais tu dois créer ta nouvelle instance avant de détruire la précédente.

    D'autre part, pour accéder au parent de ta classe, soit tu crées une instance de classe à l'aide du mot clé self à l'intérieur de la méthode __init__ comme ceci :
    et tu y accèdes avec self.parent et non plus parent depuis tes autres méthode, soit tu utilises une méthode plus propre en faisant appel à une méthode de la classe wx.Window dont dérive ton wx.Panel, qui s'appelle GetParent().

    C'est ce que j'ai fait dans une nouvelle version de la classe PanelDelete dans laquelle lorsqu'on clique sur le bouton "detruire", elle crée une nouvelle instance conteneur issue de sa propre classe rattachée à la feuille principale
    avant de s'auto-détruire.

    Pour bien montrer qu'il s'agit à chaque fois d'une nouvelle instance, je rajoute une nouvelle ligne dans la listBox à chaque nouvelle instance créée.

    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
    class PanelDelete(wx.Panel):
    	def __init__(self, parent, liste):
    		wx.Panel.__init__(self, parent, id = -1)
    		self.SetSize(parent.GetClientSize())
    		self.listBox = wx.ListBox(self,-1,(20,20),(300,80),liste,wx.LB_SINGLE)
    		self.listBox.CentreOnParent()
    		self.button = wx.Button(self,-1,"Detruire",pos=(50,300))
    		self.listBox.SetSelection(1)
    		self.liste = liste
    		self.liste.append("Nouvel enregistrement")
    		wx.EVT_SIZE(self,self.OnSize)
    		self.Bind(wx.EVT_BUTTON, self.OnClick, self.button)
     
    	def OnSize(self, evt):
    		self.listBox.CentreOnParent()
     
    	def OnClick(self, evt):
    		self.GetParent().conteneur = PanelDelete(self.GetParent(), self.liste)
    		self.Destroy()

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 4
    Par défaut
    Citation Envoyé par Alain_72
    Si tu veux recréer une instance de classe depuis une autre instance de la même classe tout en détruisant l'ancienne, c'est possible, mais tu dois créer ta nouvelle instance avant de détruire la précédente.

    D'autre part, pour accéder au parent de ta classe, soit tu crées une instance de classe à l'aide du mot clé self à l'intérieur de la méthode __init__ comme ceci :
    et tu y accèdes avec self.parent et non plus parent depuis tes autres méthode, soit tu utilises une méthode plus propre en faisant appel à une méthode de la classe wx.Window dont dérive ton wx.Panel, qui s'appelle GetParent().

    C'est ce que j'ai fait dans une nouvelle version de la classe PanelDelete dans laquelle lorsqu'on clique sur le bouton "detruire", elle crée une nouvelle instance conteneur issue de sa propre classe rattachée à la feuille principale
    avant de s'auto-détruire.

    Pour bien montrer qu'il s'agit à chaque fois d'une nouvelle instance, je rajoute une nouvelle ligne dans la listBox à chaque nouvelle instance créée.

    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
    class PanelDelete(wx.Panel):
    	def __init__(self, parent, liste):
    		wx.Panel.__init__(self, parent, id = -1)
    		self.SetSize(parent.GetClientSize())
    		self.listBox = wx.ListBox(self,-1,(20,20),(300,80),liste,wx.LB_SINGLE)
    		self.listBox.CentreOnParent()
    		self.button = wx.Button(self,-1,"Detruire",pos=(50,300))
    		self.listBox.SetSelection(1)
    		self.liste = liste
    		self.liste.append("Nouvel enregistrement")
    		wx.EVT_SIZE(self,self.OnSize)
    		self.Bind(wx.EVT_BUTTON, self.OnClick, self.button)
     
    	def OnSize(self, evt):
    		self.listBox.CentreOnParent()
     
    	def OnClick(self, evt):
    		self.GetParent().conteneur = PanelDelete(self.GetParent(), self.liste)
    		self.Destroy()
    Compris, c'etait le getparent() qu'il me manquait.
    En tout cas merci beaucoup
    entre ton explication et ce que j'ai trouvé j'ai de quoi potasser ce soir.
    Merci encore
    Bussiere

Discussions similaires

  1. Réponses: 1
    Dernier message: 31/03/2015, 15h36
  2. [FLEX] MenuBar: distinguer les items des menus
    Par alice.b dans le forum MXML
    Réponses: 0
    Dernier message: 15/04/2009, 16h21
  3. [rechargement d'une frame mère à partir d'une frame fille]
    Par Lady_jade dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 09/12/2005, 11h02
  4. Menu dans la barre des menus OS X
    Par SHiSo dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 02/06/2005, 20h16
  5. Wait cursor et accessibilité des menus
    Par Depteam1 dans le forum MFC
    Réponses: 3
    Dernier message: 23/09/2004, 19h01

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