【问题标题】:wxPython - Set Items in ListCtrl and Get Selected ItemwxPython - 在 ListCtrl 中设置项目并获取选定项目
【发布时间】:2015-04-27 18:42:43
【问题描述】:

我有以下代码用于创建一个名为“浏览器列表”的 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')

另外,我怎样才能获得选定的项目并将其存储在变量中?

【问题讨论】:

  • 你使用的是 wxPython Phoenix 还是 Classic?

标签: python wxpython


【解决方案1】:

比这要复杂一些。您插入项目,然后使用 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。我只是觉得效果更好。但是您可能会发现我的旧技巧和窍门教程很有用:

如果您决定切换,那么您可能会发现这个也很有帮助:

【讨论】:

  • 我如何制作这些图像,而不是“foo”和“bar”?
  • 你需要创建一个图片列表,然后调用widget的SetImageList方法。查看文档,您应该可以将它与InsertStringItem 结合使用,因为它的最后一个参数是ImageIndex。有关更多详细信息,请参阅文档 - wxpython.org/docs/api/wx.ListCtrl-class.html
  • 我不完全理解 InsertImageItem/InsertStringItem...有什么区别?我有以下内容但它不起作用: self.ilist=wx.ImageList(40,40) images=['/Desktop/firefoxlogo.png', '/Desktop/chromelogo.png'] for i in images: self.ilist .Add(wx.Bitmap(i))
  • 我相信 InsertImageItem 不允许您插入字符串和图像。
  • 我无法在 Linux 上正确插入图像。您可能需要在 wxPython Google 小组中提问。
猜你喜欢
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多