0

私はwxPythonを使用してアプリを作成してきました。ListCtrlを使用していくつかのデータを表示したいのですが、列が最大のスペースを占めるようにしたいのですが。これは次のとおりです。使用可能な最大サイズは、私が持っている行の間で分割されます。私はこれを試しましたが、機能しません(これは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 ...」の行にコメントすると、全画面表示になりますが、列が小さくなります。

前もって感謝します!!!

4

2 に答える 2

1

不足しているのはevent.Skip()、関数の呼び出しOnResizeです。イベントの伝播に関する詳細については、 http://wiki.wxpython.org/EventPropagationを参照してください。または、を使用することもできますself.Layout()

于 2012-05-06T15:06:52.367 に答える
0

ObjectListView(http://objectlistview.sourceforge.net/python/)を調べることをお勧めします。これは、これと他の多くの優れた機能が組み込まれているListCtrlのラッパーです。
あなたの場合、isSpaceFilling=Trueパラメータをすべての列に渡すだけで、スペースが均等に分割されます。各列の最小幅を設定することもできます。

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

ObjectListViewは最初は少し混乱しているように見えますが、非常に便利であることがわかりました。

于 2012-05-05T22:43:45.580 に答える