Bonjour,

J'ai un petit soucis avec la mise à jour de la taille d'un ScrolledWindow.

En cliquant sur un bouton, un sizer est créé est rajouté à un sizer existant (lui même dans un ScrolledWindow).
Mais celui-ci ne se met pas à jour, c'est à dire que la taille des sizers diminue pour se partager l'espace dispo, plutot que
d'"étirer" le ScrolledWindow..
Tout se met à jour quand j'agrandis la fenêtre, j'aimerais obtenir ce résultat.

J'ai essayé plein de trucs, des Update(), Refresh(), Layout() mais rien n'y fait.

Ca doit être tout simple, mais je trouve pas !

mon code :

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
 
# -*- coding: utf8 -*-
#!/usr/bin/python
 
import wx
 
class Frame(wx.Frame):
 
    def __init__(self, parent, id, title):
 
        wx.Frame.__init__(self, parent, id, title, size=(400, 300))
 
        self.panel = wx.Panel(self, -1)
 
        self.compteur = 0
 
        """
        Un ScrolledWindow dans lequel on place horizontalement
        des listbox encadrés avec un staticboxsizer,
        le tout encadré dans un staticboxsizer
        """
        staticbox_choix_etats = wx.StaticBox(self.panel, -1, u"Choix :")
        self.scrolled_window_choix_etats = wx.ScrolledWindow(self.panel, -1)
        self.scrolled_window_choix_etats.SetScrollbars(20,20,55,40)
 
        staticBoxSizer_choix_etats = wx.StaticBoxSizer(staticbox_choix_etats, wx.HORIZONTAL)
        staticBoxSizer_choix_etats.Add(self.scrolled_window_choix_etats, 1, wx.EXPAND)
 
        self.h_sizer_elements = wx.BoxSizer(wx.HORIZONTAL)
        self.ajouter_widget_element(self.h_sizer_elements)
        self.ajouter_widget_element(self.h_sizer_elements)
        self.ajouter_widget_element(self.h_sizer_elements)
 
        self.scrolled_window_choix_etats.SetSizer(self.h_sizer_elements)
 
 
        """
        Un sizer vertical dans lequel on met le celui décrit plus haut, plus un bouton.
        """
        v_sizer = wx.BoxSizer(wx.VERTICAL)
        v_sizer.Add(staticBoxSizer_choix_etats, 1, wx.EXPAND | wx.ALL, 10)
        self.bouton_ajouter_config = wx.Button(self.panel, -1, "Ajouter")
        v_sizer.Add(self.bouton_ajouter_config, 0, wx.BOTTOM | wx.LEFT | wx.RIGHT, 10)
 
 
        ## on attache le v_sizer au self.panel
        self.panel.SetSizer(v_sizer)
 
        self.bouton_ajouter_config.Bind(wx.EVT_BUTTON, self.onClicBoutonAjouterConfig)
 
        ## et on montre la frame
        self.Show(True)
 
    def ajouter_widget_element(self, sizer_dest):
        """Méthode qui ajoute un sizer avec un listbox dans 'sizer_dest'"""
 
        self.compteur += 1
 
        staticBox_liste = wx.StaticBox(self.scrolled_window_choix_etats, -1, u"Liste %s" % self.compteur)
        listBox_liste = wx.ListBox(self.scrolled_window_choix_etats, -1, choices=[], size=(200, 40))
        staticBoxSizer_liste = wx.StaticBoxSizer(staticBox_liste, wx.VERTICAL)
 
        staticBoxSizer_liste.Add(listBox_liste, 1, wx.EXPAND | wx.ALL, 5)
        sizer_dest.Add(staticBoxSizer_liste, 1, wx.EXPAND | wx.ALL, 5)
 
        return staticBoxSizer_liste
 
    def onClicBoutonAjouterConfig(self, event):
        """pour les besoins du test on l'utilise pour rajouter des éléments"""
        self.ajouter_widget_element(self.h_sizer_elements)
 
        self.scrolled_window_choix_etats.Layout()
 
 
 
App = wx.App()
Frame(None, -1, "")
App.MainLoop()