2010-10-22 15 views
0

Почему это не работает?Почему мой код не работает?

for i in [a, b, c]: 
    i.SetBitmap(wx.Bitmap(VarFiles[str(i)])) 

я получаю:

Traceback (most recent call last): 
    File "<string>", line 11, in ? 
    File "codecc.py", line 724, in ? 
    app = MyApp(0) # stdio to console; nothing = stdio to its own window 
    File "C:\Program Files (x86)\WorldViz\Vizard30\bin\lib\site-packages\wx-2.8-msw-unicode\wx\_core.py", line 7978, in __init__ 
    self._BootstrapApp() 
    File "C:\Program Files (x86)\WorldViz\Vizard30\bin\lib\site-packages\wx-2.8-msw-unicode\wx\_core.py", line 7552, in _BootstrapApp 
    return _core_.PyApp__BootstrapApp(*args, **kwargs) 
    File "codecc.py", line 719, in OnInit 
    frame = VFrame(parent=None) 
    File "codecc.py", line 374, in __init__ 
    i.SetBitmap(wx.Bitmap(VarFiles[str(i)])) 
KeyError: "<wx._core.MenuItem; proxy of <Swig Object of type 'wxMenuItem *' at 0x165aeab0> >" 

Интересно, что это работает:

i.SetBitmap(wx.Bitmap(VarFiles["i"])) 

, но это не делает:

i.SetBitmap(wx.Bitmap(VarFiles[i])) 

Последняя возвращает объект WxPython с то же имя, что и i, тем самым нарушая цикл. Поэтому мне нужно найти способ вернуть имя этого объекта. Но i.__name__ не работает.

+2

* питон не позволяет мне сделать это * и что «позволяет» вам делать? Вы получаете какие-либо ошибки? – SilentGhost

+0

Если функция A (короткий список функций), функция D предназначена для вызова функций, это ваша проблема. Они не являются синтаксически правильными. – hughdbrown

+0

Почему это не работает? – rubik

ответ

0

Это, как я «» «» фиксированный «» «» мой код:

list_a = [a, b, c] 
    list_b = ["a", "b", "c"] 
    [i.SetBitmap(wx.Bitmap(VarFiles[list_b[list_a.index(i)]])) for i in list_a] 
+1

http://docs.python.org/library/functions.html#zip – SilentGhost

+0

Спасибо SilentGhost, эта функция zip помогает мне в этом и некоторых других вещах, которые я пытался сделать! – relima

1

Как говорится в трассе, у вас есть KeyError. Поскольку i является объектом, когда вы делаете str(i), вы получаете "<wx._core.MenuItem; proxy of <Swig Object of type 'wxMenuItem *' at 0x165aeab0> >", такой ключ не существует в контейнере VarFiles.

Это не имеет никакого отношения к циклу for или тому, как вы пишете свой список.

+0

Итак, что я должен использовать вместо str (i) для получения a, b и c вместо «> "? – relima

+0

@relima: ну, что внутри 'VarFiles'? как эти вещи связаны с экземплярами 'i'? – SilentGhost

+0

VarFiles - это словарь, который возвращает путь к изображению, когда ему даны a, b и или c. VarFiles [a] возвращает: ./path/to/img/image.png работает хорошо везде, но в этом цикле. – relima

1

Перерыв на одном корпусе. Где ошибка в этом?

s = str(a) 
v = VarFiles[s] 
w = wx.Bitmap(v) 
a.SetBitmap(w) 
+0

Если я это делаю: s = "a", он работает. Если я это сделаю: s = str (a), это не так, и я получаю: KeyError: «> « – relima

+0

Я вижу выше, что @SilentGhost выявил, что 'VarFiles' - это словарь. Итак, каков должен быть ключ к «VarFiles» в этом случае? Покажите нам, что такое a, b или c, и покажите нам конструкцию словаря VarFiles. – hughdbrown

+0

a = wx.MenuItem (M [1], wx.ID_EXIT, _ («E & xit \ tAlt + F4»), _ («Выход»)) ------ VarFiles ["a"] = os.path.join (Current_DIR, 'textures/image.png') – relima

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