2015-04-27 4 views
0

У меня есть следующий код для создания ListCtrl, называемый «список браузеров».wxPython - Установить элементы в 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) 

Я wante добавить следующее, чтобы добавить эти строки в качестве элементов, но это ставит его в 1-й колонке, в то время как мне это нужно во 2-й колонке:

self.browserList.InsertStringItem(1, 'Google Chrome') 
self.browserList.InsertStringItem(2, 'Mozilla Firefox') 

Кроме того, как я могу получить выбранный элемент и сохранить его в переменной?

+0

Вы используете wxPython Phoenix или Classic? –

ответ

0

Это немного сложнее, чем это. Вы вставляете элемент, а затем используете 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. Я просто думаю, что это работает лучше. Но вы можете найти мои старые советы и приемы учебник полезным:

И если вы решили переключиться, то вы могли бы найти это один полезным, а также:

+0

Вместо «foo» и «bar» как я могу сделать эти изображения? – ohbrobig

+0

Вам необходимо создать список изображений, а затем вызвать метод «SetImageList» виджета. Глядя на документы, вы сможете использовать это в сочетании с 'InsertStringItem', поскольку его последним аргументом является' ImageIndex'. Дополнительную информацию см. В документах - http://www.wxpython.org/docs/api/wx.ListCtrl-class.html –

+0

Я не совсем понимаю InsertImageItem/InsertStringItem ... в чем разница? У меня есть следующее и не работает: self.ilist = wx.ImageList (40,40) images = ['/ Desktop/firefoxlogo.png', '/Desktop/chromelogo.png'] для i в изображениях: self.ilist .Add (wx.Bitmap (i)) – ohbrobig

Смежные вопросы