Bonjour,

je débute avec wxPython, ce n'est que mon deuxième programme avec (et le premier où j'essaie d'intégrer une grille type Excel).
J'utilise PyCharm et Python 3.9.1
Je voulais me créer un petit programme utile pour le boulot mais à peine commencé je galère avec une histoire de re-dimensionnement de fenêtre.
Pour info, par habitude, j'écris mes classes dans des fichiers séparés (je trouve que cela fait moins fouilli).

J'ai commencé à écrire l'embryon de code suivant:

main.py:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import wx
import Frame.winmain as itf
 
 
def main():
    app = wx.App()
    frame = itf.MainInterface(parent=None, index=-1)
 
    frame.Show()
    app.MainLoop()
 
 
if __name__ == "__main__":
    main()
winmain.py
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
import wx
 
from pathlib import Path
from Frame.menu import MyMenu
from Frame.grid import MyGrid
 
 
class MainInterface(wx.Frame):
    """Notre fenêtre principale qui hérite de Frame
    """
 
    def __init__(self, parent, index):
        wx.Frame.__init__(self, parent, title='FAR et AAR', id=index,  size=(830, 750),
                          style=wx.DEFAULT_FRAME_STYLE)
 
        self.CentreOnScreen()
        self.init_ui()
 
    def init_ui(self):
        self.pnl = wx.Panel(self)
 
        self.menu = MyMenu()
        self.Bind(wx.EVT_MENU, self.on_quit, self.menu.quitter)
        self.SetMenuBar(self.menu)
 
        self.CreateStatusBar()
 
        self.grille_import = MyGrid(self.pnl, nb_col=12, nb_li=55000)
 
        sizer1 = wx.BoxSizer(wx.VERTICAL)
        sizer1.Add(self.grille_import, wx.EXPAND)
 
        self.pnl.SetSizerAndFit(sizer1)
 
    def on_quit(self, event):
        self.Close()
grid.py
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
import wx
import wx.grid
 
 
class MyGrid(wx.grid.Grid):
 
    def __init__(self, parent, nb_col, nb_li):
        wx.grid.Grid.__init__(self)
 
        self.nb_col = nb_col
        self.nb_li = nb_li
 
        self.tableau = wx.grid.Grid(parent, -1)
        self.tableau.CreateGrid(self.nb_li, self.nb_col)
        self.tableau.SetSize(830, 750)
menu.py:
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
import wx
 
 
class MyMenu(wx.MenuBar):
    """Classe de la barre de menu du programme"""
 
    def __init__(self):
        wx.MenuBar.__init__(self)
 
        self.fichier = wx.Menu()
        self.sep = self.fichier.AppendSeparator()
        self.ouvrir = wx.MenuItem(self.fichier, wx.ID_OPEN, "&Ouvrir\tCtrl+O", "Ouvrir un fichier")
        self.quitter = wx.MenuItem(self.fichier, wx.ID_EXIT, "&Quitter\tCtrl+Q", "Quitter l'application")
 
        list_opt = [self.ouvrir, self.sep, self.quitter]
        for elt in list_opt:
            self.fichier.Append(elt)
 
        self.Append(menu=self.fichier, title="&Fichier")
J'ai donc deux problèmes que je n'arrive pas à résoudre malgré mes différentes recherches et les différents essais que j'ai effectué.

1er problème: la grid que j'ai instancié sous le nom self.grille_import et qui est insérée dans le sizer1 avec le flag wx.EXPAND, ben quand j'agrandi ma fenêtre la grid reste exactement à la même taille. Elle ne s'adapte pas à taille de mon Frame.
J'ai tenté plein de trucs différents, avec et sans sizer mais rien n'y fait. Je n'arrive pas à voir pourquoi la taille reste fixe.
Dans la classe MyGrid au début je ne définissais pas de taille du tout et c'était encore pire car je n'obtenais qu'une mini-grid où on voyait seulement les barres de défilement.

2ème problème: quand j'utilise ma méthode on_quit pour fermer mon programme, PyCharm me retourne le code erreur: Process finished with exit code -1073741819 (0xC0000005).
Alors que sur un autre programme que j'ai fait avec la même méthode, je n'ai pas ce problème.
Là aussi après des recherches sur le net je n'ai pas réussi à trouver de solution qui fonctionne, je n'arrive pas à savoir à quoi cela est dû.

Si quelqu'un pouvait se pencher sur mon problème qui ne doit pas être grand chose mais qui me fait tourner en bourrique, je lui en serais très reconnaissant.

Merci beaucoup