Re-Bonjour,

Voila mon probleme. (vous trouverez ci-dessous le code complet si des
essais sont nécessaires):

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
 
import wx
 
#-- Creation des classes.
 
class MainFrame(wx.Frame):
        def __init__(self,parent,id):
            wx.Frame.__init__(self, parent,id,'PyOphta')
	    #--Creation  d'un conteneur
	    panel=wx.Panel(self)
	    panel.SetBackgroundColour('yellow')
	    #--Creation de la barre de status
	    self.CreateStatusBar()
	    #--Creation de la barre de menu
            menubar=wx.MenuBar()	
 
	    #--Création d'un premier menu "Patient"
	    #--Création des autres menus
	    patient=wx.Menu()
	    [...]
	    #--Peuplement du menu: Patient
	    nouveau=patient.Append(wx.NewId(),"Nouveau","Saisir un nouveau patient")
	    #--Affichage de la barre de menu
	    self.SetMenuBar(menubar)
	    #--Accrochage de l'event wx.Menu
	    self.Bind(wx.EVT_MENU, self.OnNewPatient, nouveau)
	    self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
	    #--Défnition de la fonction OnNewPatient
	    #--Ouvre un formulaire pour la saisie
	    #--des donnees patient
	def OnNewPatient(self,evt):
		form=SaisiePatient()
		form.Show()
 
#--Création de la classe saisie patient
class SaisiePatient(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, "Nouveau patient")
        panel = wx.Panel(self)
    [...]
 
 
##--Le main Loop
if __name__=='__main__':
    app=wx.PySimpleApp()
    frame=MainFrame(None,-1)
    frame.Show(True)		       
    app.MainLoop()
La frame SaisiePatient s'affiche par dessus la frame
MainFrame.

Comme faire pour que SaisiePatient s'affiche dans le panel de MainFrame?

Merci.

Voici le code complet si necessaire.

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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
import wx
# -*- coding: latin-1 -*- 
 
#-- Creation des classes.
 
class MainFrame(wx.Frame):
        def __init__(self,parent,id):
            wx.Frame.__init__(self, parent,id,'PyOphta')
	    #--Creation  d'un conteneur
	    panel=wx.Panel(self)
	    panel.SetBackgroundColour('yellow')
	    #--Creation de la barre de status
	    self.CreateStatusBar()
	    #--Creation de la barre de menu
            menubar=wx.MenuBar()	
 
	    #--Création d'un premier menu "Patient"
	    #--Création des autres menus
	    patient=wx.Menu()
	    agenda=wx.Menu()
	    consult=wx.Menu()
	    compta=wx.Menu()
	    #--Peuplement de la barre de menu
	    menubar.Append(patient,"Patient")
	    menubar.Append(agenda,"Agenda")
	    menubar.Append(consult,"Consultation")
	    menubar.Append(compta,"Comptabilité")
	    #--Peuplement du menu: Patient
	    nouveau=patient.Append(wx.NewId(),"Nouveau","Saisir un nouveau patient")
	    patient.Append(wx.NewId(),"Rechercher","Rechercher un patient")
	    #--Mise en place  d'un séparateur
	    patient.AppendSeparator()
	    #--Poursuite peuplement du menu:  Patient
	    patient.Append(wx.NewId(),"Quitter","Quitte l'application")
	    #--Peuplement de agenda
	    agenda.Append(wx.NewId(),"Nouveau","Prendre un rendez-vous")
	    agenda.Append(wx.NewId(),"Rechercher","Rechercher le premier rendez-vous disponible")
	    agenda.Append(wx.NewId(),"Consulter","Consulter l'agenda")
	    #--Peuplement de "consultation"
	    consult.Append(wx.NewId(),"Saisir","Saisir une nouvelle consultation")
	    consult.Append(wx.NewId(),"Rechercher","Recherche multicritère d'une consultation")
	    #--Peuplement du Menu Comptabilté
	    #--TODO
	    #--le panel est pas jaune !!!!colour et pas color
	    #--Affichage de la barre de menu
	    #--Cette méthode doit venir à la fin du
	    #--remplissage de menubar.
	    self.SetMenuBar(menubar)
	    #--Accrochage de l'event wx.Menu
	    self.Bind(wx.EVT_MENU, self.OnNewPatient, nouveau)
	    self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
	    #--Défnition de la fonction OnNewPatient
	    #--Ouvre un formulaire pour la saisie
	    #--des donnees patient
	def OnNewPatient(self,evt):
		form=SaisiePatient(
			)
		form.Show()
	def OnCloseWindow(self,evt):
		self.Destroy()
 
 
 
#--Création de la classe saisie patient
class SaisiePatient(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, "Nouveau patient")
        panel = wx.Panel(self)
 
        # First create the controls
        topLbl = wx.StaticText(panel, -1, "État civil")
        topLbl.SetFont(wx.Font(18, wx.SWISS, wx.NORMAL, wx.BOLD))
 
        nameLbl = wx.StaticText(panel, -1, "Name:")
        name = wx.TextCtrl(panel, -1, "");
 
        addrLbl = wx.StaticText(panel, -1, "Address:")
        addr1 = wx.TextCtrl(panel, -1, "");
        addr2 = wx.TextCtrl(panel, -1, "");
 
        cstLbl = wx.StaticText(panel, -1, "City, State, Zip:")
        city  = wx.TextCtrl(panel, -1, "", size=(150,-1));
        state = wx.TextCtrl(panel, -1, "", size=(50,-1));
        zip   = wx.TextCtrl(panel, -1, "", size=(70,-1));
 
        phoneLbl = wx.StaticText(panel, -1, "Phone:")
        phone = wx.TextCtrl(panel, -1, "");
 
        emailLbl = wx.StaticText(panel, -1, "Email:")
        email = wx.TextCtrl(panel, -1, "");
 
        saveBtn = wx.Button(panel, -1, "Save")
        cancelBtn = wx.Button(panel, -1, "Cancel")
 
        # Now do the layout.
 
        # mainSizer is the top-level one that manages everything
        mainSizer = wx.BoxSizer(wx.VERTICAL)
        mainSizer.Add(topLbl, 0, wx.ALL, 5)
        mainSizer.Add(wx.StaticLine(panel), 0,
                wx.EXPAND|wx.TOP|wx.BOTTOM, 5)
 
        # addrSizer is a grid that holds all of the address info
        addrSizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5)
        addrSizer.AddGrowableCol(1)
        addrSizer.Add(nameLbl, 0,
                wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
        addrSizer.Add(name, 0, wx.EXPAND)
        addrSizer.Add(addrLbl, 0,
                wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
        addrSizer.Add(addr1, 0, wx.EXPAND)
        addrSizer.Add((10,10)) # some empty space
        addrSizer.Add(addr2, 0, wx.EXPAND)
 
        addrSizer.Add(cstLbl, 0,
                wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
 
        # the city, state, zip fields are in a sub-sizer
        cstSizer = wx.BoxSizer(wx.HORIZONTAL)
        cstSizer.Add(city, 1)
        cstSizer.Add(state, 0, wx.LEFT|wx.RIGHT, 5)
        cstSizer.Add(zip)
        addrSizer.Add(cstSizer, 0, wx.EXPAND)
 
        addrSizer.Add(phoneLbl, 0,
                wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
        addrSizer.Add(phone, 0, wx.EXPAND)
        addrSizer.Add(emailLbl, 0,
                wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
        addrSizer.Add(email, 0, wx.EXPAND)
 
        # now add the addrSizer to the mainSizer
        mainSizer.Add(addrSizer, 0, wx.EXPAND|wx.ALL, 10)
 
        # The buttons sizer will put them in a row with resizeable
        # gaps between and on either side of the buttons
        btnSizer = wx.BoxSizer(wx.HORIZONTAL)
        btnSizer.Add((20,20), 1)
        btnSizer.Add(saveBtn)
        btnSizer.Add((20,20), 1)
        btnSizer.Add(cancelBtn)
        btnSizer.Add((20,20), 1)
 
        mainSizer.Add(btnSizer, 0, wx.EXPAND|wx.BOTTOM, 10)
 
        #Lie le sizer a panel
        panel.SetSizer(mainSizer)
 
        # Fit the frame to the needs of the sizer.  The frame will
        # automatically resize the panel as needed.  Also prevent the
        # frame from getting smaller than this size.
        mainSizer.Fit(self)
        mainSizer.SetSizeHints(self)
 
##--Le main Loop
if __name__=='__main__':
    app=wx.PySimpleApp()
    frame=MainFrame(None,-1)
    frame.Show(True)		       
    app.MainLoop()