2012-05-05 6 views
0

私はwxPythonを使用してアプリケーションを作成しています。私はListCtrlを使っていくつかのデータを表示したいと思います。そして、私は列が最大のスペースを占有したいと思います。これは、利用可能な最大サイズが、私が持っている行の間で分割されていることです。 (これはlistctrlがあるパネルです)私はこれを試してみたが、それは動作しません:wxPythonでウィンドウを調整する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 ...」行をコメントした場合、それはフルスクリーンを示しているが、列は小さい。

は事前にありがとうございます!!!

+0

私はあなたがここで達成したいことを理解していません。列幅やリストウィジェット自体を自動整列しますか?より大きな例を挙げることができますか? VirtualListPanelをサイザーに追加する方法に問題があるのでしょうか?レイアウトを調べるには、wx.lib.mixins.inspection.InspectionMixinを試してみてください。 – uhz

+0

私が望むのは、列をフルサイズに調整することです。これは、ウィンドウが1000ピクセル幅の場合、各列を1000/5ピクセル幅(私は現在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パラメータを渡すだけです各列の最小幅を設定することもできます。

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

最初はObjectListViewがちょっと混乱しているようですが、私はそれが非常に有用であることを発見しました。

+0

wxPythonでそれをやってください。問題は私がライブラリではなく、とにかく感謝だと思うからです! – markmb

関連する問題