2012-05-05 2 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을 sizer에 추가하는 방법입니다. wx.lib.mixins.inspection.InspectionMixin을 사용해 레이아웃을 조사 할 수 있습니다. – uhz

+0

내가 원하는 것은 열을 전체 크기로 조정하는 것입니다. 이것은 윈도우가 1000px 너비라면, 각 열을 1000/5px 너비 (현재는 5 열)로 만들고 싶습니다. 그리고 윈도우의 크기가 조절되면 열의 크기도 조정됩니다. – markmb

답변

1

무엇이 누락 되었습니까? 은 OnResize 함수로 호출됩니다. 이벤트 전파에 대한 자세한 내용은 http://wiki.wxpython.org/EventPropagation에서 확인할 수 있습니다. 또는 self.Layout()을 사용할 수도 있습니다.

+0

OMG! 그 간단한 선은 나에게 두통을 만들었다! !! 고마워요! 이제 완벽하게 작동합니다! – markmb

0

난 당신이 ObjectListView 조사하는 것이 좋습니다 수 있습니다 (http://objectlistview.sourceforge.net/python/) 이것은 ListCtrl을 둘러싼 래퍼이며 많은 다른 멋진 기능을 내장하고 있습니다.
귀하의 경우 모든 열에 isSpaceFilling=True 매개 변수를 전달하면됩니다. 공간을 균등하게 나눕니다. 각 열의 최소 너비를 설정할 수도 있습니다. ObjectListView가 처음에는 약간 혼란스러워 보이지만, 매우 유용하다는 것을 알았습니다.

+0

어떻게하는지 배우고 싶습니다. wxPython에서 할 수 있습니다. 문제는 라이브러리 자체가 아니라 저라고 생각하기 때문입니다.하지만 어쨌든 고마워요! – markmb

관련 문제