2015-12-22 27 views
1

问题:我有一个wx.ListCtrl在其中我想包括一个颜色选择器。所以,对于一个列表,如本图所示: ListCtrlColourPickerCtrl ListCtrl

我想要得到的是这样的:

enter image description here

在其中黑色方形元素是wx.ColorPickerCtrl。我查看了ListCtrl方法并找不到任何东西。我也看了UltimateListCtrl,但没有找到任何方法。

这是我到目前为止的代码:

import wx 
import wx.xrc 


class MyFrame1 (wx.Frame): 

    def __init__(self, parent): 
     wx.Frame.__init__ (self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size(500,300), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL) 

     self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize) 

     bSizer2 = wx.BoxSizer(wx.VERTICAL) 

     self.m_panel2 = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL) 
     bSizer3 = wx.BoxSizer(wx.VERTICAL) 

     self.m_listCtrl9 = wx.ListCtrl(self.m_panel2, style=wx.LC_REPORT| wx.LC_HRULES | wx.LC_SINGLE_SEL | wx.BORDER_SUNKEN) 
     self.m_listCtrl9.InsertColumn(0, 'Something') 
     self.m_listCtrl9.InsertColumn(1, 'Description') 
     self.m_listCtrl9.InsertColumn(2, 'Color ', width=125) 

     for i in range(0,20): 
      self.m_listCtrl9.InsertStringItem(0, "212343" + str(i)) 


     bSizer3.Add(self.m_listCtrl9, 0, wx.ALL|wx.EXPAND, 5) 

     self.m_staticline4 = wx.StaticLine(self.m_panel2, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) 
     bSizer3.Add(self.m_staticline4, 0, wx.EXPAND |wx.ALL, 5) 

     self.m_panel2.SetSizer(bSizer3) 
     self.m_panel2.Layout() 
     bSizer3.Fit(self.m_panel2) 
     bSizer2.Add(self.m_panel2, 1, wx.EXPAND |wx.ALL, 5) 

     self.SetSizer(bSizer2) 
     self.Layout() 

     self.Centre(wx.BOTH) 

def main(): 

    app = wx.App(False) 
    f = MyFrame1(None) 
    f.Show() 
    app.MainLoop()  


if __name__ == '__main__': 
    main() 

我想也许有一种明显的方式,因为它似乎简单的事,但我不知道该怎么做,有什么建议?

在此先感谢。

回答

2

您当然需要UltimateListCtrl才能达到所需的行为。它有一个SetItemWindow方法,它可以将控件插入ListCtrl。要使其工作,请确保UltimateListCtrl的样式包括wx.LC_REPORTulc.ULC_HAS_VARIABLE_ROW_HEIGHT。这应该做的伎俩:

import wx.lib.agw.ultimatelistctrl as ulc 

class MyFrame1 (wx.Frame): 
    def __init__(self, parent): 
     ... 
     self.m_listCtrl9 = ulc.UltimateListCtrl(self.m_panel2, agwStyle=wx.LC_REPORT|ulc.ULC_HAS_VARIABLE_ROW_HEIGHT) 
     ... 
     self.color_pickers = [] 
     for i in range(20): 
      idx = self.m_listCtrl9.InsertStringItem(0, "212343" + str(i)) 
      color_picker = wx.ColourPickerCtrl(self.m_listCtrl9, -1) 
      self.m_listCtrl9.SetItemWindow(idx, 2, color_picker) 
      self.color_pickers.append(color_picker) 

我们得到以下结果: enter image description here