我在REPORT模式下有一个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标志时,图像完全可见,但它们都显示在一行中,名称不再可见。
答案 0 :(得分:1)
由于图像是50x50,我认为它们不再符合“小”的条件。尝试使用wx.IMAGE_LIST_NORMAL而不是wx.IMAGE_LIST_SMALL。我找不到任何关于手动设置行高的信息,所以我猜这是不可能的。但是,我确实在这个主题上找到了一个bug report,说它在wx2.9中得到了解决。你使用的是2.9吗?
或者,您可以使用纯Python的UltimateListCtrl,如果它没有这种能力,您可以快速修补它,因为作者非常敏感。
答案 1 :(得分: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)