2012-07-03 46 views
11

我的wx.ListCtrl(size=(-1,200))中有三列。我希望列創建後填充ListCtrl的寬度。理想情況下,第一列可以擴展以填充可用的額外空間。第二列和第三列不需要展開,並且最好不會​​改變寬度(格式化ocd)。使列寬佔用wxPython中的可用空間ListCtrl

當前,每個ListCtrl列使用(width=-1)設置。

我有一種感覺,我可以使用代碼的這一部分對我有利......

# Expand first column to fit longest entry item 
list_ctrl.SetColumnWidth(0, wx.LIST_AUTOSIZE) 

僞代碼(也許):

# After wx.ListCtrl creation 
Get width of ListCtrl control 
Get width of each ListCtrl column 
Calculate unused width of ListCtrl 
Set first column width to original width + unused width 

補充:

鑑於下面的例子,我不明白如何啓動autowidthmixin。目前,我正試圖將listctrl放入一個foldpanel。 foldpanel是一個類,類內的一個函數創建listctrl。我現在甚至沒有信心,鑑於我的代碼結構,這可以完成!

class MyPanel(wx.Panel): 

    def __init__(self, parent, dictionary): 
     self.dictionary = dictionary 
     """Constructor""" 
     wx.Panel.__init__(self, parent) 

     # Layout helpers (sizers) and content creation (setPanel) 
     self.mainSizer = wx.BoxSizer(wx.VERTICAL) 
     self.SetSizer(self.mainSizer) 
     list_ctrl = self.setPanel() 
     self.mainSizer.Add(list_ctrl, 0, wx.ALL | wx.EXPAND, 5) 
     self.GetSizer().SetSizeHints(self) 

    def setPanel(self): 
     index = 0 

     list_ctrl = wx.ListCtrl(self, size=(-1, 200), 
           style=wx.LC_REPORT | wx.BORDER_SUNKEN) 

     list_ctrl.InsertColumn(0, "Variable", format=wx.LIST_FORMAT_LEFT, width=-1) 
     list_ctrl.InsertColumn(1, "x", format=wx.LIST_FORMAT_RIGHT, width=-1) 
     list_ctrl.InsertColumn(2, u"\u03D0", format=wx.LIST_FORMAT_RIGHT, width=-1) 

     for key, value in self.dictionary.iteritems(): 
      list_ctrl.InsertStringItem(index, str(key)) 
      list_ctrl.SetStringItem(index, 1, ("%.2f" % value[0])) 
      list_ctrl.SetStringItem(index, 2, ("%.8f" % value[1])) 
      index += 1 

     list_ctrl.SetColumnWidth(0, wx.LIST_AUTOSIZE) 
     list_ctrl.SetColumnWidth(1, wx.LIST_AUTOSIZE) 
     list_ctrl.SetColumnWidth(2, wx.LIST_AUTOSIZE) 

     return list_ctrl 

回答

13

您需要使用ListCtrlAutoWidthMixin mixin類。 wxPython演示應用程序在ListCtrl演示中有一個示例。根據documentation,您可以使用它的setResizeColumn方法來告訴它要調整哪一列。默認值是最後一列。

編輯(07/05/2012):在您的代碼中,創建一個類似於演示中的ListCtrl類。它看起來是這樣的:

class TestListCtrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin): 
    def __init__(self, parent, ID, pos=wx.DefaultPosition, 
       size=wx.DefaultSize, style=0): 
     wx.ListCtrl.__init__(self, parent, ID, pos, size, style) 
     listmix.ListCtrlAutoWidthMixin.__init__(self) 
     self.setResizeColumn(0) 

然後,當你實例化它,你只需要調用list_ctrl = TestListCtrl(ARG1,ARG2 ... ARGN)

注意,我要包含一個setResizeColumn調用( )在我的代碼上面。它沒有測試,但它應該工作。

+0

增加了一些額外的信息和代碼片段。鑑於我的代碼atm的佈局,我無法弄清楚如何使用mixin類。 –