2012-07-03 67 views
11

私はwx.ListCtrl(size=(-1,200))に3つの列を持っています。私は、作成した後で、列がListCtrlの幅を埋めるようにしたいと思います。理想的には、最初の列を展開して余分なスペースを埋めることができます。第2および第3列は拡張する必要はなく、好ましくは幅を変更しない(書式設定)。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を開始する方法を理解していません。現在、私はfoldpanelの中​​にlistctrlを入れようとしています。 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メソッドを使用して、どの列のサイズを変更するかを指定できます。デフォルトは最後の列です。

EDIT(07/05/2012):コードでは、デモのものに似たListCtrlクラスを作成します。あなたはそれをインスタンス化する場合次に、あなただけの私がsetResizeColumnへの呼び出しを含めlist_ctrl = TestListCtrl(引数1、ARG2 ... ARGN)

注意を(呼びたい

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) 

:それはこのようになります)上記の私のコードで。テストされていませんが、うまくいくはずです。

+0

追加情報とコードスニペットを追加しました。自分のコードatmのレイアウトでmixinクラスを使用する方法を理解できません。 –

関連する問題