14

に 3 つの列がありますwx.ListCtrl(size=(-1,200))。作成後に ListCtrl の幅を列で埋めたいと思います。理想的には、最初の列を拡張して、使用可能な余分なスペースを埋めることができます。2 番目と 3 番目の列は拡張する必要がなく、できれば幅を変更しないでください (ocd の書式設定)。

現在、各 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
4

1 に答える 1

15

ListCtrlAutoWidthMixin mixin クラスを使用する必要があります。wxPython デモ アプリケーションには、ListCtrl デモの例があります。documentationによると、setResizeColumn メソッドを使用して、サイズを変更する列を指定できます。デフォルトは最後の列です。

編集 (2012年 7 月 5 日): コードで、デモのような 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() の呼び出しを含めたことに注意してください。テストされていませんが、動作するはずです。

于 2012-07-03T15:57:52.000 に答える