2013-02-18 81 views
0

我必须得到一个只有两个字符串列的列表。在GTK一切正常,但在Windows 7我得到这个: Windows 7如何使图标在报表模式下不可见wx.ListCtrl?

class ListViewCtrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin): 
    def __init__(self, parent, ID, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0): 
     wx.ListCtrl.__init__(self, parent, ID, pos, size, style) 
     listmix.ListCtrlAutoWidthMixin.__init__(self) 

class ListView(wx.Panel, listmix.ColumnSorterMixin): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent, -1, style=wx.WANTS_CHARS) 

     self.il = wx.ImageList(16, 16)   
     self.up = self.il.Add(resources.filter_up.GetBitmap()) 
     self.dn = self.il.Add(resources.filter_down.GetBitmap()) 
     self.list = ListViewCtrl(self, -1, style=wx.LC_REPORT | wx.SIMPLE_BORDER | wx.LC_EDIT_LABELS | wx.LC_SORT_ASCENDING) 
     self.list.SetImageList(self.il, wx.IMAGE_LIST_SMALL) 

     i = 0 
     _program_dir = os.path.split(__file__)[0] 
     self.itemDataMap = {} 
     for fn in os.listdir(os.path.join(_program_dir, '../design/caps')):    
      self.itemDataMap[i] = (fn, "Line {0}".format(i+1)) 
      i += 1    
     self.PopulateList() 

     listmix.ColumnSorterMixin.__init__(self, 3) 
     self.__DoLayout() 

    def __DoLayout(self): 
     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(self.list, 1, wx.EXPAND) 
     self.SetSizer(sizer)   
     self.SetAutoLayout(True) 

    def PopulateList(self): 
     info = wx.ListItem() 
     info.m_mask = wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE | wx.LIST_MASK_FORMAT 
     info.m_image = -1 
     info.m_format = 0 
     info.m_text = "File name" 
     self.list.InsertColumnInfo(0, info) 
     info.m_text = "Column 2" 
     self.list.InsertColumnInfo(1, info) 
     for k, v in self.itemDataMap.items(): 
      index = self.list.InsertStringItem(sys.maxint, v[0]) 
      self.list.SetStringItem(index, 1, v[1]) 
      self.list.SetItemData(index, k) 
     self.list.SetColumnWidth(0, 100) 
     self.list.SetColumnWidth(1, wx.LIST_AUTOSIZE)   
     self.currentItem = 0 

    def GetListCtrl(self): 
     return self.list 

    def GetSortImages(self): 
     return (self.dn, self.up) 

每一行使用的图像数字0从所附的图像列表。我怎样才能摆脱这个图标?

wxPython的2.9.2.4,Win7的X64

UPDATE:

这里是GTK列表(没有图标,你看到的):

GTK

+0

你能告诉我们什么东西看起来像GTK,它的工作原理? – congusbongus 2013-02-18 01:43:48

+0

不幸的是,我现在无法做到这一点,至少在6小时内...... – 2013-02-18 01:55:47

+0

请看看它在GTK中的样子。 – 2013-02-18 10:17:33

回答

2

微软ListView小部件有一个美妙的“功能”,如果有一个图像列表分配给控制,那么它假定你总是想显示一个我每个项目的法师。如果你没有为一个项目指定一个,那么它会为你使用图像列表中的第一个,因为根据MS,你真的想做什么,但忘了自己做。显然。

无论如何,解决方法是要么使图像列表中的第一个图像成为完全透明的图标,要么将其他图标明确地分配给项目。

+0

跨平台编程的副作用)))谢谢! – 2013-02-19 13:23:49

相关问题