IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

wxPython Discussion :

Problème de scroll bar dans un grid [Python 3.X]


Sujet :

wxPython

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2018
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Problème de scroll bar dans un grid
    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 : 75
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()

  2. #2
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2018
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Une solution alternative
    Bon j'ai trouvé une solution alternative : faire en sorte que la largeur d'une colonne soit toujours la moitié de la largeur disponible.

    Donc, quand une scroll bar verticale apparait, la largeur du window contenant la grille diminue. Dans ce cas on diminue également la largeur des deux colonnes.
    Ce n'est pas exactement ce que je voulais faire, mais ça fera très bien l'affaire !

    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
     
        def add_data(self,data):
            """ Ajoute une donnée """
     
            row = self.nbdata // 2
            col = self.nbdata % 2
     
            if row >= self.GetNumberRows():
                self.AppendRows()
     
                w,h = self.GetGridWindow().GetSize()
                larg = w//2
                if self.GetColSize(0)>larg:
                    self.SetColSize(0,larg)
                    self.SetColSize(1,larg)
                    self.ForceRefresh()
     
     
            self.SetCellValue(row,col,data)
            self.nbdata += 1
    a+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. scroll bar dans une Grid dans un TabPanel
    Par ffert2907 dans le forum Ext JS / Sencha
    Réponses: 2
    Dernier message: 04/11/2009, 22h23
  2. [2.0] Gestion de la scroll bar dans un repeater
    Par CUCARACHA dans le forum ASP.NET
    Réponses: 2
    Dernier message: 30/07/2007, 16h20
  3. Scroll bar dans un tableau
    Par Oberown dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 05/06/2007, 17h26
  4. Utiliser une scroll bar dans une fenêtre
    Par Silverstone dans le forum C++
    Réponses: 1
    Dernier message: 29/12/2006, 00h51
  5. Scroll bar dans un TPageControl
    Par richard038 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 11/08/2005, 12h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo