wxPython - 在 ListCtrl 中设置项目并获取所选项目
wxPython - Set Items in ListCtrl and Get Selected Item
我有以下用于创建名为 "browser list" 的 ListCtrl 的代码。
self.browserList=wx.ListCtrl(panel, pos=(20,150), size=(250,100), style.wx.LC_REPORT|wx.BORDER_SUNKEN)
self.browserList.InsertColumn(0, '')
self.browserList.InsertColumn(1, 'Browser: ')
self.browserList.SetColumnWidth(0, 50)
self.browserList.SetColumnWidth(1, 200)
我想添加以下内容以将这些字符串添加为项目,但它把它放在第一列中,而我需要它在第二列中:
self.browserList.InsertStringItem(1, 'Google Chrome')
self.browserList.InsertStringItem(2, 'Mozilla Firefox')
另外,如何获取选中的项目并将其存储在变量中?
比那要复杂一点。您插入该项目,然后使用 SetStringItem 将数据插入其他列。这是一个快速而肮脏的例子:
import wx
########################################################################
class MyForm(wx.Frame):
#----------------------------------------------------------------------
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "List Control Tutorial")
# Add a panel so it looks the correct on all platforms
panel = wx.Panel(self, wx.ID_ANY)
self.index = 0
self.list_ctrl = wx.ListCtrl(panel, size=(-1,100),
style=wx.LC_REPORT
|wx.BORDER_SUNKEN
)
self.list_ctrl.InsertColumn(0, '', width=50)
self.list_ctrl.InsertColumn(1, 'Browser', width=200)
# add some browsers
self.list_ctrl.InsertStringItem(0, "foo")
self.list_ctrl.SetStringItem(0, 1, "Google Chrome")
self.list_ctrl.InsertStringItem(1, "bar")
self.list_ctrl.SetStringItem(1, 1, "Mozilla Firefox")
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.list_ctrl, 0, wx.ALL|wx.EXPAND, 5)
panel.SetSizer(sizer)
#----------------------------------------------------------------------
# Run the program
if __name__ == "__main__":
app = wx.App(False)
frame = MyForm()
frame.Show()
app.MainLoop()
我个人更喜欢使用 ObjectListView 而不是 ListCtrl。我只是觉得效果更好。但您可能会发现我的旧提示和技巧教程很有用:
如果您决定转换,那么您可能会发现这个也有帮助:
我有以下用于创建名为 "browser list" 的 ListCtrl 的代码。
self.browserList=wx.ListCtrl(panel, pos=(20,150), size=(250,100), style.wx.LC_REPORT|wx.BORDER_SUNKEN)
self.browserList.InsertColumn(0, '')
self.browserList.InsertColumn(1, 'Browser: ')
self.browserList.SetColumnWidth(0, 50)
self.browserList.SetColumnWidth(1, 200)
我想添加以下内容以将这些字符串添加为项目,但它把它放在第一列中,而我需要它在第二列中:
self.browserList.InsertStringItem(1, 'Google Chrome')
self.browserList.InsertStringItem(2, 'Mozilla Firefox')
另外,如何获取选中的项目并将其存储在变量中?
比那要复杂一点。您插入该项目,然后使用 SetStringItem 将数据插入其他列。这是一个快速而肮脏的例子:
import wx
########################################################################
class MyForm(wx.Frame):
#----------------------------------------------------------------------
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "List Control Tutorial")
# Add a panel so it looks the correct on all platforms
panel = wx.Panel(self, wx.ID_ANY)
self.index = 0
self.list_ctrl = wx.ListCtrl(panel, size=(-1,100),
style=wx.LC_REPORT
|wx.BORDER_SUNKEN
)
self.list_ctrl.InsertColumn(0, '', width=50)
self.list_ctrl.InsertColumn(1, 'Browser', width=200)
# add some browsers
self.list_ctrl.InsertStringItem(0, "foo")
self.list_ctrl.SetStringItem(0, 1, "Google Chrome")
self.list_ctrl.InsertStringItem(1, "bar")
self.list_ctrl.SetStringItem(1, 1, "Mozilla Firefox")
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.list_ctrl, 0, wx.ALL|wx.EXPAND, 5)
panel.SetSizer(sizer)
#----------------------------------------------------------------------
# Run the program
if __name__ == "__main__":
app = wx.App(False)
frame = MyForm()
frame.Show()
app.MainLoop()
我个人更喜欢使用 ObjectListView 而不是 ListCtrl。我只是觉得效果更好。但您可能会发现我的旧提示和技巧教程很有用:
如果您决定转换,那么您可能会发现这个也有帮助: