0

文字列列が 2 つだけのリストを取得する必要があります。GTK ではすべて問題ありませんが、Windows 7 では次のようになります。 ウィンドウズ7

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

アップデート:

GTK からのリストを次に示します (ご覧のようにアイコンはありません)。

GTK

4

1 に答える 1

2

Microsoft ListView ウィジェットには素晴らしい「機能」があり、コントロールにイメージ リストが割り当てられている場合、すべての項目に対して常にイメージを表示する必要があると見なされます。項目に 1 つを指定しない場合は、イメージ リストの最初の項目が使用されます。これは、MS によると、それが本当にやりたかったことですが、自分で行うのを忘れただけだからです。どうやら。

とにかく、回避策は、画像リストの最初の画像を完全に透明なアイコンにするか、アイテムに他のアイコンを明示的に割り当てることです。

于 2013-02-18T19:17:12.033 に答える