0

我有一个处于报告模式的 wx.ListCtrl,我使用图像列表来显示带有 SetItemColumnImage 的 50x50 像素的图标。现在的问题是,我在图标右列显示的文字高度小于50像素,并且图标高于文字的部分被截掉了。

有没有办法告诉 ListCtrl 将行高调整为图标的高度?最后的避难所是更改文本的字体大小,但应该有更好的方法。

更新:

这是我的一些代码:

self.list = util.ListCtrl(nb, style=wx.LC_REPORT|
                wx.LC_SINGLE_SEL|wx.LC_NO_HEADER|wx.LC_ALIGN_LEFT)
self.list.InsertColumn(0, 'Avatar', width=-1)
self.list.InsertColumn(1, 'Name', width=-1)
self.list.SetColumnWidth(0, 50)

self.imagelist = wx.ImageList(50, 50, 255, 20)
self.list.SetImageList(self.imagelist, wx.IMAGE_LIST_SMALL)

i = 0
for user in self.users:
    self.list.Append(['', user['name']])

    if user['avatar']:
        bitmap = wx.BitmapFromImage(user['avatar'])
        imageidx = self.imagelist.Add(bitmap)
        self.list.SetItemColumnImage(i, 0, imageidx)

    i += 1

当我删除 LC_REPORT 标志时,图像完全可见,但它们都显示在一行中,并且名称不再可见。

4

2 回答 2

1

由于图像是 50x50,我认为它们不再符合“小”的条件。尝试使用 wx.IMAGE_LIST_NORMAL 而不是 wx.IMAGE_LIST_SMALL。我找不到任何关于手动设置行高的信息,所以我猜这是不可能的。但是,我确实找到了关于这个主题的错误报告,说它已在 wx2.9 中解决。你用的是2.9吗?

或者,您可以使用纯 Python 的 UltimateListCtrl,如果它没有该功能,您可能可以快速修补它,因为作者反应非常迅速。

于 2012-06-29T13:35:14.683 回答
0

我喝了几杯咖啡才弄清楚。

对 ImageList.Add 的调用应在 ListCtrl.Append(或 ListCtrl.InsertItem)之前,以便 ListCtrl 根据 ImageList 中图像的高度更改其行的高度。

所以而不是

for user in self.users:
    self.list.Append(['', user['name']])

    if user['avatar']:
        bitmap = wx.BitmapFromImage(user['avatar'])
        imageidx = self.imagelist.Add(bitmap)
        self.list.SetItemColumnImage(i, 0, imageidx)

你应该用这样的东西

for user in self.users:

    if user['avatar']:
        bitmap = wx.BitmapFromImage(user['avatar'])
        imageidx = self.imagelist.Add(bitmap)

    self.list.Append(['', user['name']])

    if user['avatar']:
        self.list.SetItemColumnImage(i, 0, imageidx)

看起来很难看,直到您实现默认头像:

def_avatar = 'default_avatar.jpg'

for user in self.users:

    bitmap = wx.BitmapFromImage(user['avatar'] if user['avatar'] else def_avatar)
    imageidx = self.imagelist.Add(bitmap)

    self.list.Append(['', user['name']])
    self.list.SetItemColumnImage(i, 0, imageidx)
于 2016-09-20T04:01:51.073 回答