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:
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 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()
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
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()
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 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)
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é.
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")
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
Partager