Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103871
  • 博文数量: 14
  • 博客积分: 1475
  • 博客等级: 上尉
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-03 23:33
文章分类

全部博文(14)

文章存档

2007年(14)

我的朋友

分类: Python/Ruby

2007-05-13 08:43:58

 
    今天在开发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,就行了.
阅读(1643) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~