ListCtrl调整wxPython中的窗口

时间:2012-05-05 16:47:14

标签: python wxpython

我一直在使用wxPython创建一个应用程序。我想使用ListCtrl显示一些数据,我希望colums占用最大空间。这是:可用的最大大小除以我拥有的行之间。我试过这个但它不起作用(这是listctrl所在的面板):

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 ...”行,它显示全屏,但列很小。

提前谢谢!!!

2 个答案:

答案 0 :(得分:1)

event.Skip()函数OnResize调用了您遗漏的内容。有关事件传播的一些详细信息,请参见http://wiki.wxpython.org/EventPropagation。或者,您可以使用self.Layout()

答案 1 :(得分:0)

我建议您查看ObjectListView(http://objectlistview.sourceforge.net/python/)。这是ListCtrl的包装,它具有内置的这个和许多其他很好的功能 在您的情况下,您可以将isSpaceFilling=True参数传递给每个列,它们将平均分配空间。您甚至可以为每列设置最小宽度。

ColumnDefn('Title', valueGetter='title', isSpaceFilling=True, minimumWidth=100)

我知道ObjectListView起初看起来有点令人困惑,但我发现它非常有用。