ListCtrl 中的 ColourPickerCtrl
ColourPickerCtrl in a ListCtrl
问题:我有一个 wx.ListCtrl,我想在其中包含一个颜色选择器。因此,给定一个列表,如下图所示:
我想要得到的是这样的:
其中黑色方块元素为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()
我在想也许有一个明显的方法可以做到这一点,因为它看起来很简单,但我不知道该怎么做,有什么建议吗?
提前致谢。
您肯定需要 UltimateListCtrl
才能实现所需的行为。它有一个SetItemWindow
方法,可以向ListCtrl中插入一个控件。要使其工作,请确保 UltimateListCtrl
的样式包括 wx.LC_REPORT
和 ulc.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)
这会产生以下结果:
问题:我有一个 wx.ListCtrl,我想在其中包含一个颜色选择器。因此,给定一个列表,如下图所示:
我想要得到的是这样的:
其中黑色方块元素为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()
我在想也许有一个明显的方法可以做到这一点,因为它看起来很简单,但我不知道该怎么做,有什么建议吗?
提前致谢。
您肯定需要 UltimateListCtrl
才能实现所需的行为。它有一个SetItemWindow
方法,可以向ListCtrl中插入一个控件。要使其工作,请确保 UltimateListCtrl
的样式包括 wx.LC_REPORT
和 ulc.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)
这会产生以下结果: