2012-06-22 6 views
0

Как добавить дополнительные данные в элементы wxListBox. Я создаю приложение для просмотра фотографий, и пользователь дважды нажимает на путь к файлу изображения, чтобы открыть изображение. Когда пользователь дважды нажимает на элемент в списке, функция делает listbox1.GetStringSelection(), чтобы использовать выбранный файл cuurent при открытии изображения StaticBitmap. Но это отображает весь путь к файлу, который выглядит уродливым, и как можно изменить его, чтобы показывать только имя файла? как я могу добавить дополнительные данные для каждого элемента списка?Как добавить дополнительные данные в элементы wxListBox

ле \ Windows Sidebar \ Gadgets \ Weather.Gadget \ Images \ 120DPI (120DPI) alertIcon.png

C: \ Program Files \ Windows Sidebar \ Gadgets \ Weather.Gadget \ Images \ 120DPI (120DPI) grayStateIcon .png

C: \ Program Files \ Windows Sidebar \ гаджеты \ Weather.Gadget \ Images \ 120DPI (120DPI) greenStateIcon.png

C: \ Program Files \ Windows Sidebar \ гаджеты \ Weather.Gadget \ изображения \ 120DPI (120DPI) notConnectedStateIcon.png

C: \ Program Files \ W indows Боковая панель \ Гаджеты \ Weather.Gadget \ images \ 144DPI (144DPI) alertIcon.png

+0

контратип http://stackoverflow.com/questions/4433715/how-can-i-store-objects-other-than-strings-in-a-wxpython- combobox Хотя это combobox, они оба наследуют эту функциональность от одного и того же родительского класса – GP89

ответ

3

Я писал об этом на своем blog некоторое время назад. Вы должны это проверить. В основном вы просто добавляете каждый элемент в список в список, а также добавляете дополнительные данные в качестве второго параметра. В моем примере я добавляю экземпляр объекта. Вот код из моего сообщения в блоге:

import wx 

######################################################################## 
class Car: 
    """""" 

    #---------------------------------------------------------------------- 
    def __init__(self, id, model, make, year): 
     """Constructor""" 
     self.id = id 
     self.model = model 
     self.make = make 
     self.year = year  


######################################################################## 
class MyForm(wx.Frame): 

    #---------------------------------------------------------------------- 
    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY, "Tutorial") 

     # Add a panel so it looks the correct on all platforms 
     panel = wx.Panel(self, wx.ID_ANY) 

     ford = Car(0, "Ford", "F-150", "2008") 
     chevy = Car(1, "Chevrolet", "Camaro", "2010") 
     nissan = Car(2, "Nissan", "370Z", "2005") 

     sampleList = [] 
     lb = wx.ListBox(panel, 
         size=wx.DefaultSize, 
         choices=sampleList) 
     self.lb = lb 
     lb.Append(ford.make, ford) 
     lb.Append(chevy.make, chevy) 
     lb.Append(nissan.make, nissan) 
     lb.Bind(wx.EVT_LISTBOX, self.onSelect) 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(lb, 0, wx.ALL, 5) 
     panel.SetSizer(sizer) 

    #---------------------------------------------------------------------- 
    def onSelect(self, event): 
     """""" 
     print "You selected: " + self.lb.GetStringSelection() 
     obj = self.lb.GetClientData(self.lb.GetSelection()) 
     text = """ 
     The object's attributes are: 
     %s %s %s %s 

     """ % (obj.id, obj.make, obj.model, obj.year) 
     print text 

# Run the program 
if __name__ == "__main__": 
    app = wx.App(False) 
    frame = MyForm() 
    frame.Show() 
    app.MainLoop() 
Смежные вопросы