1

我在 wx.Python 中工作,我想让我的 wx.ListCtrl 的列自动调整大小,即至少为列名的宽度,否则与最宽的元素或其列名一样宽。起初我认为 ListCtrlAutoWidthMixin 可能会这样做,但事实并非如此,所以看起来我可能必须自己做(如果有内置的方法,请纠正我!!!)

我怎样才能知道我的列表的标题和元素将呈现多宽?

4

4 回答 4

4

除了 jakepars 答案:这应该检查标题是否更大,或者在列中占用最多空间的项目。不是优雅,而是工作......

import wx

class Frame(wx.Frame):
    def __init__(self, *args, **kw):
        wx.Frame.__init__(self, *args, **kw)

        self.list = wx.ListCtrl(self, style=wx.LC_REPORT)
        items = ['A', 'b', 'something really REALLY long']
        self.list.InsertColumn(0, "AAAAAAAAAAAAAAAAAAAAAAAA")
        for item in items:
            self.list.InsertStringItem(0, item)
        self.list.SetColumnWidth(0, wx.LIST_AUTOSIZE)
        a = self.list.GetColumnWidth(0)
        print "a " + str(a)
        self.list.SetColumnWidth(0,wx.LIST_AUTOSIZE_USEHEADER)
        b = self.list.GetColumnWidth(0)
        print "b " + str(b)
        if a>b:
            print "a is bigger"
            self.list.SetColumnWidth(0, wx.LIST_AUTOSIZE)
app = wx.App(False)
frm = Frame(None, title="ListCtrl test")
frm.Show()
app.MainLoop()
于 2011-04-18T15:34:10.213 回答
3

如果您想省去很多与 wx.ListCtrl 相关的麻烦,您应该改用ObjectListView(有一本不错的食谱和代码示例论坛)。它非常好,我倾向于将它用于除非常基本的 ListCtrl 之外的任何东西,因为它非常强大、灵活且易于编码。这是与之相关的 wxPyWiki 页面(包括示例代码)。开发人员也在 wxPython 邮件列表中,因此您可以通过电子邮件发送问题。

于 2009-04-06T23:03:42.673 回答
2

是的,你必须自己为 wx.ListCtrl 做这个,我不确定做对是否容易(或优雅)。

考虑使用 wx.Grid,这里有一个小例子可以帮助你:

import wx, wx.grid

class GridData(wx.grid.PyGridTableBase):
    _cols = "This is a long column name,b,c".split(",")
    _data = [
        "1 2 3".split(),
        "4,5,And here is a long cell value".split(","),
        "7 8 9".split()
    ]

    def GetColLabelValue(self, col):
        return self._cols[col]

    def GetNumberRows(self):
        return len(self._data)

    def GetNumberCols(self):
        return len(self._cols)

    def GetValue(self, row, col):
        return self._data[row][col]


class Test(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None)
        grid = wx.grid.Grid(self)
        grid.SetTable(GridData())
        grid.EnableEditing(False)
        grid.SetSelectionMode(wx.grid.Grid.SelectRows)
        grid.SetRowLabelSize(0)
        grid.AutoSizeColumns()


app = wx.PySimpleApp()
app.TopWindow = Test()
app.TopWindow.Show()
app.MainLoop()
于 2009-04-06T19:43:54.027 回答
1

这对我有用

import wx

class Frame(wx.Frame):
    def __init__(self, *args, **kw):
        wx.Frame.__init__(self, *args, **kw)

        self.list = wx.ListCtrl(self, style=wx.LC_REPORT)
        items = ['A', 'b', 'something really REALLY long']
        self.list.InsertColumn(0, "AA")
        for item in items:
            self.list.InsertStringItem(0, item)
        self.list.SetColumnWidth(0, wx.LIST_AUTOSIZE)

app = wx.App(False)
frm = Frame(None, title="ListCtrl test")
frm.Show()
app.MainLoop()
于 2011-01-31T21:43:01.693 回答