Bonjour,

Je débute avec wxpython, je me débrouille pour l'instant, mais voila je butte sur un probleme, j'essaie d'utiliser un tableau dans une de mes formes, un des tableaux qui semble interressant c'est pygridtablebase que j'ai retrouvé dans les démos de wxpython, j'ai tenté d'adapter ce code dans le mien, mais voila que ca ne fonctionne pas tres bien. Donc en fouillant sur le net j'ai trouvé d'autre code que j'ai réussi a inclure dans mes formulaires, mais une fois ceci fait j'essaie de jouer avec (par exemple utilisation d'un bouton me permettant d'ajouter une colonne, autre bouton pour ajouter une ligne de données, etc).

donc voici en résumé mes trois fichier python: qui ouvre mon formulaire et defini les actions de mes boutons 'main.py', format du formulaire 'formPrincipale.py', format du tableau 'tableau.py'

fichier: 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, formPrincipale
class mainframe(formPrincipale.MyFrame1):    
        def ajout_colonne( self, event ):
              self.table.ApppendCols(1)
              self.grid.ForceRefresh()
class MyApp(wx.App):
    def OnInit(self):
        frame = mainframe(None)
        self.SetTopWindow(frame)
        frame.Show(True)
        return True
app = MyApp(True)
app.MainLoop()
fichier formPrincipale.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
 
import wx
class MyFrame1 ( wx.Frame ):	
	def __init__( self, parent ):
		wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 653,637 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )		
		bSizer3 = wx.BoxSizer( wx.VERTICAL )		
		bSizer3.SetMinSize( wx.Size( 585,501 ) ) 
		self.m_button = wx.Button( self, wx.ID_ANY, u"MyButton", wx.DefaultPosition, wx.DefaultSize, 0 )
		bSizer3.Add( self.m_button2, 0, wx.ALL, 5 )		
		import tableau
		self.grid = wx.grid.Grid(self)
		self.table = tableau.TestTable()
		self.grid.SetTable(self.table, True)		
		bSizer3.Add( self.grid, 0, wx.ALL, 5 )		
		self.SetSizer( bSizer3 )
		self.Layout()		
		# Connect Events
		self.m_button.Bind( wx.EVT_BUTTON, self.ajout_colonne )
	def __del__( self ):
		pass	
	# Virtual event handlers, overide them in your derived class	
	def ajout_colonne( self, event ):
		event.Skip()
fichier tableau.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
37
38
39
40
41
42
43
44
45
 
import  wx.grid
class TestTable(wx.grid.PyGridTableBase):
    def __init__(self):
        wx.grid.PyGridTableBase.__init__(self)
        self.colLabels = ['ID', 'Description', 'Severity', 'Priority']
        self.dataTypes = [wx.grid.GRID_VALUE_NUMBER,
                          wx.grid.GRID_VALUE_STRING,
                          wx.grid.GRID_VALUE_CHOICE + ':only in a million years!,wish list,minor,normal,major,critical',
                          wx.grid.GRID_VALUE_NUMBER + ':1,5',
                          wx.grid.GRID_VALUE_CHOICE + ':all,MSW,GTK,other',
                          wx.grid.GRID_VALUE_BOOL,
                          wx.grid.GRID_VALUE_BOOL,
                          wx.grid.GRID_VALUE_BOOL,
                          wx.grid.GRID_VALUE_FLOAT + ':6,2',
                          ]
        self.data = [
            [1010, "The foo doesn't bar", "major", 1, 'MSW', 1, 1, 1, 1.12],
            [1011, "I've got a wicket in my wocket", "wish list", 2, 'other', 0, 0, 0, 1.50],
            [1012, "Rectangle() returns a triangle", "critical", 5, 'all', 0, 0, 0, 1.56]
 
            ]
 
 
 
 
    def GetNumberRows(self):
        return 5
 
    def GetNumberCols(self):
        return 4
 
    def IsEmptyCell(self, row, col):
        return False
 
    def GetValue(self, row, col):
        try:
            return self.data[row][col]
        except IndexError:
            return ''
        #return "(%s,%s)" % (self.rowLabels[row], self.colLabels[col])
    def SetValue(self, row, col, value):
        pass     
    def GetColLabelValue(self, col):
        return self.colLabels[col]
Il y a quelque chose que je ne comprend pas bien car en faisant des recherches sur le net je ne comprend pas tres bien comment ca marche car ce que je comprend dans mon code c'est que je crée un tableau (pygridtablebase) dans un autre tableau (wx.grid) Pourquoi? dans certain autres exemple ils construisent leur tableau dans un panel??

et lorsque je tente d'utiliser les méthodes de pygridtablebase que je retrouve sur le net (appendcol, appendrow, etc..) il me donne l'erreur que la méthode n'existe pas ?

Merci beaucoup de votre aide
PS j'ai simplifié grandement mes fichiers python, alors s'il manque des renseignement laissez le moi savoir.

Pascal