wxPython 的 ListCtrl 控件的列表模式和小图标模式下各项目行距调整

来源:互联网 发布:地震科学数据共享中心 编辑:程序博客网 时间:2024/04/28 05:29
wxPython的ListCtrl控件在列表模式和小图标模式下,各行是紧挨着的,非常难看,翻了半天手册,也没发现有什么方法可以调整。

倒是有个SetColumnWidth方法可以调整各列的宽度(在列表模式或小图标模式下,col参数设为-1就行了,可以用来调整小图标模式和列表模式的宽度),但是没有什么方法可以调整行距,要是有SetRowHeight方法就好了。

想来想去,突然想出了一个"绝招"解决问题了。把wx.ImageList中的图片弄大一些,图片空白的地方显示为透明或与背景色一致就行了。因为ListCtrl的列表和小图标模式中字体的高度为约为15像素(默认情况下),如果图片的高度为20,则各行之间自动就会留下空白。

试试果然能行,不过小图标模式中ImageStringItem与图标的顶部对齐,列表模式中与图标的底部对齐,没办法文字与图片垂直居中对齐。

办法有点傻,不过傻办法比没办法好。

如:
#!/usr/bin/python
#
-*- coding: utf8 -*-


import wx


= [u'今天天气真好'* 30

class DemoFrame(wx.Frame):
    
def __init__(self):
        wx.Frame.
__init__(self, None, -1"wx.ListCtrl in wx.LC_SMALL_ICON mode",
                          size
=(600,400))
        self.SetFont(wx.Font(
12, wx.FONTFAMILY_SWISS, wx.NORMAL, wx.NORMAL, False,u'宋体'))

        il 
= wx.ImageList(25,25, True)
        
for name in range(len(d)):
            bmp 
= wx.Bitmap('text1.png', wx.BITMAP_TYPE_PNG)
            il_max 
= il.Add(bmp)

        self.lc 
= wx.ListCtrl(self, -1, style=wx.LC_SMALL_ICON | wx.LC_AUTOARRANGE)

        self.lc.AssignImageList(il, wx.IMAGE_LIST_SMALL)

        
for x in range(len(d)):
            self.lc.InsertImageStringItem(x, d[x], x)

app 
= wx.PySimpleApp()
frame 
= DemoFrame()
frame.Show()
app.MainLoop()


生成的图片如下:



比原来的样子看起来舒服多了!!