Bonjour

J'ai un programme avec une grille du type grid.grid
Quand j'ajoute des données, je suis parfois amené à ajouter des lignes à ma grille. Et quand la grille dépasse une certaine taille, le widget ajoute des scroll bars automatiquement.
La scroll bar verticale est la bien venue, mais au lieu de d'avoir une scroll bar horizontale, j'aimerai un redimensionnement automatique du grid de manière à ne pas avoir de scroll bar horizontale.
(Voir photo pour mieux comprendre)

Nom : grid scroll.jpg
Affichages : 97
Taille : 120,8 Ko

Voici le code (je n'ai gardé que l'essentiel)
Merci d'avance


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
 
import wx
import wx.grid as gridlib
from random import randint
 
class MonApp(wx.App):
    def OnInit(self):
        # Création de la fenêtre principale
        self.locale = wx.Locale(wx.LANGUAGE_FRENCH)
 
        frame = MaFrame()
        self.SetTopWindow(frame)
 
        return True
 
class MaGrid(gridlib.Grid):
    def __init__(self, parent):
 
        gridlib.Grid.__init__(self,parent,-1)
 
        self.SetDefaultCellFont(wx.Font( wx.FontInfo(16)))
        self.SetLabelFont(wx.Font( wx.FontInfo(16)).Bold())
        self.CreateGrid(2,2)
        self.SetColLabelValue(0,"Col 1")
        self.SetColLabelValue(1,"Col 2")
        self.SetRowLabelSize(35)
        self.SetColLabelSize(25)
        self.SetDefaultCellAlignment(wx.ALIGN_CENTER,wx.ALIGN_CENTER)
        self.DisableDragGridSize()
        self.DisableDragColSize()
        self.DisableDragRowSize()
        self.EnableEditing(False)
        self.SetSelectionMode(gridlib.Grid.GridSelectNone)
        # self.SetMinSize((220,-1))
        # self.ShowScrollbars(wx.SHOW_SB_NEVER,wx.SHOW_SB_ALWAYS)
 
        self.nbdata = 0
        self.parent = parent
 
    def add_data(self,data):
        """ Ajoute une donnée """
 
        row = self.nbdata // 2
        col = self.nbdata % 2
 
        if row >= self.GetNumberRows():
            self.AppendRows()
            # frame = self.parent.GetParent()
            # frame.sizer_gauche.Layout()
            # frame.sizer_principal.Layout()
            # frame.Fit()
 
 
        self.SetCellValue(row,col,data)
        self.nbdata += 1
 
class MaFrame(wx.Frame):
    """ Fenêtre principale du programme. """
    def __init__(self):
 
        wx.Frame.__init__(self,None,-1,"Test grille")
 
        #-----------------------------------------------------------------#
        self.panel_gauche = wx.Panel(self,style=wx.BORDER_RAISED)
        self.sizer_gauche = wx.BoxSizer(wx.VERTICAL)
 
        self.grid = MaGrid(self.panel_gauche)
 
        self.panel_1= wx.Panel(self.panel_gauche,style=wx.BORDER_SIMPLE)
        self.panel_1.SetMinSize((-1,100))
 
        self.sizer_gauche.Add(self.grid,1,flag =wx.EXPAND)
        self.sizer_gauche.Add(self.panel_1,0,flag =wx.EXPAND)
 
        self.panel_gauche.SetSizerAndFit(self.sizer_gauche)
 
        #-----------------------------------------------------------------#
        self.panel_centre = wx.Panel(self,style=wx.BORDER_RAISED)
        self.sizer_centre = wx.BoxSizer(wx.VERTICAL)
 
 
        sizer_bouton = wx.BoxSizer()
        self.btn = wx.Button(self.panel_centre,-1,"Ajouter une donnée")
        self.Bind(wx.EVT_BUTTON,self.on_btn,self.btn)
        sizer_bouton.Add(self.btn,flag=wx.ALL,border=5)
 
        self.panel_2 = wx.Panel(self.panel_centre,-1,style=wx.BORDER_SIMPLE)
        self.panel_2.SetMinSize((200,200))
 
        self.sizer_centre.Add(sizer_bouton,flag=wx.ALIGN_CENTER)
        self.sizer_centre.Add(self.panel_2)
 
        self.panel_centre.SetSizer(self.sizer_centre)
 
 
        # Sizer principal
        self.sizer_principal = wx.BoxSizer()
        self.sizer_principal.Add(self.panel_gauche,1,flag=wx.EXPAND)
        self.sizer_principal.Add(self.panel_centre)
 
 
        self.SetSizer(self.sizer_principal)
        self.Fit()
 
        self.Show()
 
    def on_btn(self,event):
        data = str(randint(1,100))
        self.grid.add_data(data)
 
if __name__ == "__main__":
    programme = MonApp()
    programme.MainLoop()