2012-05-05 28 views
0

我一直在使用wxPython创建一个应用程序。我想使用ListCtrl显示一些数据,我希望colums占用最大空间。这是:可用的最大大小被划分在我有的行之间。我试过,但它不工作(这是面板,listctrl的是):现在ListCtrl在wxPython中调整窗口

class VirtualListPanel(wx.Panel): 
    def __init__(self, parent): 
    wx.Panel.__init__(self, parent, -1) 

    width = self.GetParent().GetClientSize().width/5 
    coches = vehiculos()  
    gris = wx.Color(220,220,220) 

    self.lista = wx.ListCtrl(self, style=wx.LC_REPORT|wx.LC_HRULES|wx.LC_VRULES) 
    self.lista.InsertColumn(0, "Matricula", width=width) 
    self.lista.InsertColumn(1, "Tipo", width=width) 
    self.lista.InsertColumn(2, "Matriculacion", width=width) 
    self.lista.InsertColumn(3, "Ult. ITV", width=width) 
    self.lista.InsertColumn(4, "Prox. ITV", width=width) 

    i = 0 
    for data in coches: 
     index = self.lista.InsertStringItem(i, data[0]) 
      self.lista.SetStringItem(index, 1, str(data[1])) 
      self.lista.SetStringItem(index, 2, str(data[2])) 
     self.lista.SetStringItem(index, 3, str(data[3])) 
     self.lista.SetStringItem(index, 4, str(prox(data[1],data[2],data[3]))) 
     if((index+1) % 2 == 0): 
      self.lista.SetItemBackgroundColour(index,gris) 
     i += 1 

    self.sizer = wx.BoxSizer(wx.HORIZONTAL) 
    self.sizer.Add(self.lista, 1, wx.EXPAND|wx.ALL) 
    self.SetSizer(self.sizer) 

    self.Bind(wx.EVT_SIZE, self.OnResize) 

def OnResize(self, event): 
     width = self.GetParent().GetClientSize().width/5 
    self.lista.SetColumnWidth(0, width) 
    self.lista.SetColumnWidth(1, width) 
    self.lista.SetColumnWidth(2, width) 
    self.lista.SetColumnWidth(3, width) 
    self.lista.SetColumnWidth(4, width) 

,它甚至不占据整个窗口,那只能说明在左上角有一个小广场。如果我评论“self.Bind(wx.EVT_SIZE ......”行,它显示全屏,但列是小的。

预先感谢您!

+0

我不明白你想在这里实现什么:你想自动对齐列宽或列表部件本身?你能提供一个更大的例子吗?也许问题在于如何将VirtualListPanel添加到sizer中?您可以尝试使用wx.lib.mixins.inspection.InspectionMixin来调查布局。 – uhz

+0

我想要的是将列调整为完整大小。这意味着,如果窗口宽度为1000px,我希望每个列的宽度都为1000/5px(我现在有5列),如果调整窗口大小,列也会调整大小 – markmb

回答

1

你缺少的是event.Skip()调用OnResize函数。关于事件传播的一些细节可以在这里找到http://wiki.wxpython.org/EventPropagation。或者,您可以使用self.Layout()

+0

OMG!那条简单的线条让我头痛!非常感谢你!它现在完美地工作! – markmb

0

我建议你看看ObjectListView (http://objectlistview.sourceforge.net/python/)。这是一个包含ListCtrl的包装器,它具有这个以及许多其他很好的功能。
对于你的情况,你可以将isSpaceFilling=True参数传递给每一列,甚至可以设置每列的最小宽度。您可以设置每列的最小宽度。知道ObjectListView起初看起来有点混乱,但我发现它非常有用。

+0

我想了解如何在wxPython中执行它,因为我认为问题在于我,而不是图书馆本身,不过谢谢! OMG! – markmb