发博文
thinkc的博客

thinkc.blog.chinaunix.net

   
个人资料
  • 博客访问:71054
  • 博文数量:14
  • 博客积分:1475
  • 博客等级:上尉
  • 注册时间:2007-05-03 23:33:03
订阅我的博客
  • 订阅
  • 订阅到鲜果
  • 订阅到抓虾
  • 订阅到Google
字体大小: 博文
关于图像列表的问题 (2007-05-13 08:43)
分类: wxpython


 
    今天在开发NewEdit功能时,我使用了一个 wxListCtrl,它要用到图形,我提供了一个有两个图形的ImageList,用它来显示不同的状态.基本代码如下:
 
    imagel = wx.ImageList(16, 16)
    self.uncheck_state = imagel.Add(wx.Image('images/uncheck.gif').ConvertToBitmap())
    self.check_state = imagel.Add(wx.Image('images/check.gif').ConvertToBitmap())

    box = wx.BoxSizer(wx.VERTICAL)
    self.list = wx.ListCtrl(self, -1, style = wx.LC_REPORT | wx.SUNKEN_BORDER)
    self.list.SetImageList(imagel, wx.IMAGE_LIST_SMALL)
   
    插入行数据的部分省略了.我发现图形根本显示不出来.试来试去,我终于想起来了,以前也出现过这个问题,其原因就是因为这里的imagel(imagelist的对象)是一个局部对象,在真正显示图形时,这个对象已经被释放掉了.尽管SetImageList方法对它有一个引用,但从现象上看,它的确是被删除了,所以图形显示不出来.既然知道了问题的所在,解决就非常容易,将其保存为对象的属性即可(即不作为局部变量).改变后的代码为:
 
    self.imagel = wx.ImageList(16, 16)
    self.uncheck_state = self.imagel.Add(wx.Image('images/uncheck.gif').ConvertToBitmap())
    self.check_state = self.imagel.Add(wx.Image('images/check.gif').ConvertToBitmap())

    box = wx.BoxSizer(wx.VERTICAL)
    self.list = wx.ListCtrl(self, -1, style = wx.LC_REPORT | wx.SUNKEN_BORDER)
    self.list.SetImageList(self.imagel, wx.IMAGE_LIST_SMALL)
   
    也就是在所有imagel前加上了self,就行了.

亲,您还没有登录,请[登录][注册]后再进行评论