1)可以以某种方式在对象wx.ListCtrl的特定列的每一行中插入按钮吗? 2)为什么只能在第一列中编辑字符串的值?初始化wx.ListCtrl:
self.m_listCtrl_number = wx.ListCtrl(self.panel, wx.ID_ANY, wx.DefaultPosition, (450, 80),
wx.LC_REPORT | wx.BORDER_SUNKEN | wx.LC_EDIT_LABELS | wx.LC_SINGLE_SEL)
self.bsizer_textCtrl.Add(self.m_listCtrl_number, 0, wx.ALL, 5)
self.m_listCtrl_number.InsertColumn(0, 'Min', format=wx.LIST_FORMAT_CENTER, width=wx.LIST_AUTOSIZE)
self.m_listCtrl_number.InsertColumn(1, 'Max', format=wx.LIST_FORMAT_CENTER, width=wx.LIST_AUTOSIZE)
self.m_listCtrl_number.InsertColumn(2, 'Fill', format=wx.LIST_FORMAT_CENTER, width=wx.LIST_AUTOSIZE_USEHEADER)
添加项目:
self.m_listCtrl_number.InsertItem(self.index_numer, '0')
self.m_listCtrl_number.SetItem(self.index_numer, 1, '1')
self.m_listCtrl_number.SetItem(self.index_numer, 2, 'qwerty') # fixme Button!!!
self.index_numer += 1
答案 0 :(得分:0)
您将不得不使用ultimatelistctrl
。
这是其中一个演示程序的黑客版本:
import wx
from wx.lib.agw import ultimatelistctrl as ULC
class TestPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
boldfont = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
boldfont.SetWeight(wx.BOLD)
boldfont.SetPointSize(12)
self.ulc = ULC.UltimateListCtrl(self, agwStyle = wx.LC_REPORT
| wx.LC_VRULES
| wx.LC_HRULES
| ULC.ULC_HAS_VARIABLE_ROW_HEIGHT)
info = ULC.UltimateListItem()
info._mask = wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE | wx.LIST_MASK_FORMAT | ULC.ULC_MASK_CHECK
info._image = []
info._format = 0
info._kind = 1
info._text = "Artist Name"
self.ulc.InsertColumnInfo(0, info)
info = ULC.UltimateListItem()
info._format = wx.LIST_FORMAT_RIGHT
info._mask = wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE | wx.LIST_MASK_FORMAT | ULC.ULC_MASK_FONT
info._image = []
info._text = "Title"
info._font = boldfont
self.ulc.InsertColumnInfo(1, info)
info = ULC.UltimateListItem()
info._mask = wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE | wx.LIST_MASK_FORMAT
info._format = 0
info._text = "Genre"
info._font = font
info._image = []
self.ulc.InsertColumnInfo(2, info)
self.button1 = wx.Button(self.ulc, -1, "Button1")
self.button2 = wx.Button(self.ulc, -1, "Button2")
self.button3 = wx.Button(self.ulc, -1, "Button3")
index = self.ulc.InsertStringItem(3, " ")
self.ulc.SetItemWindow(index, 0, self.button1)
self.ulc.SetItemWindow(index, 1, self.button2)
self.ulc.SetItemWindow(index, 2, self.button3)
self.Bind(wx.EVT_BUTTON, self.OnButton)
self.ulc.InsertStringItem(0, "Newsboys")
self.ulc.SetStringItem(0, 1, "Go")
self.ulc.SetStringItem(0, 2, "Rock")
self.ulc.InsertStringItem(1, "Puffy")
self.ulc.SetStringItem(1, 1, "Bring It!")
self.ulc.SetStringItem(1, 2, "Pop")
self.ulc.InsertStringItem(2, "Family Force 5")
self.ulc.SetStringItem(2, 1, "III")
self.ulc.SetStringItem(2, 2, "Crunk")
self.ulc.SetColumnWidth(0, 150)
self.ulc.SetColumnWidth(1, 200)
self.ulc.SetColumnWidth(2, 100)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.ulc, 1, wx.EXPAND)
self.SetSizer(sizer)
def OnButton(self,event):
b= event.GetEventObject()
print(b.GetLabel(),"pressed")
########################################################################
class TestFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="MvP UltimateListCtrl Demo")
panel = TestPanel(self)
self.Show()
#----------------------------------------------------------------------
if __name__ == "__main__":
app = wx.App()
frame = TestFrame()
app.MainLoop()