2008-10-18 8 views
2

J'ai un ListCtrl qui affiche une liste d'éléments que l'utilisateur doit sélectionner. Cela fonctionne bien, sauf que lorsque le ctrl n'est pas assez grand pour afficher tous les éléments, je veux qu'il se dilate vers le bas avec une barre de scoll verticale plutôt que d'utiliser une barre de défilement horizontale comme il se développe vers la droite.wxpython - Développer le contrôle de liste verticalement et non horizontalement

La création de ListCtrl:

self.subjectList = wx.ListCtrl(self, self.ID_SUBJECT, style = wx.LC_LIST | wx.LC_SINGLE_SEL | wx.LC_VRULES) 

Les articles sont insérées à l'aide wx.ListItem:

item = wx.ListItem() 
item.SetText(subject) 
item.SetData(id) 
item.SetWidth(200) 
self.subjectList.InsertItem(item) 

Répondre

3

Utilisez le style wxLC_REPORT.

import wx 

class Test(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None) 
     self.test = wx.ListCtrl(self, style = wx.LC_REPORT | wx.LC_NO_HEADER) 

     for i in range(5): 
      self.test.InsertColumn(i, 'Col %d' % (i + 1)) 
      self.test.SetColumnWidth(i, 200) 


     for i in range(0, 100, 5): 
      index = self.test.InsertStringItem(self.test.GetItemCount(), "") 
      for j in range(5): 
       self.test.SetStringItem(index, j, str(i+j)*30) 

     self.Show() 

app = wx.PySimpleApp() 
app.TopWindow = Test() 
app.MainLoop() 
+0

usering wx.LC_REPORT au lieu de wx.LC_LIST me donne une barre de défilement vertical, mais tous les éléments de texte dissapear (bien que la barre de défilement regarde autour de la bonne taille pour une liste complète ...) –

+0

Vous devez insérer explicitement les colonnes avant de pouvoir les utiliser. J'ai ajouté un exemple –

+0

pourquoi votre gamme pour j'incrémente par 5? – Soviut

1

Essayez ceci:

import wx 

class Test(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None) 
     self.test = wx.ListCtrl(self, style = wx.LC_ICON | wx.LC_AUTOARRANGE) 

     for i in range(100): 
      self.test.InsertStringItem(self.test.GetItemCount(), str(i)) 

     self.Show() 

app = wx.PySimpleApp() 
app.TopWindow = Test() 
app.MainLoop() 
+0

ok, mais comment puis-je définir la largeur de chaque colonne? (par exemple 200px?) –

+0

Le manuel dit que self.test.SetColumnWidth (-1, 200) devrait fonctionner mais ce n'est pas le cas, donc je ne sais pas. SetColumnWidth fonctionne bien pour le mode rapport, mais là vous avez le tracas de la gestion des colonnes vous-même. –

+0

Ou ... vous pouvez utiliser une seule colonne ... peut-être même utiliser wxListbox ... pourquoi compliquer les choses? –