为什么这不起作用?
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]))
最后一个返回一个与i
同名的wxpython对象,从而打破了循环。所以我需要找到一种方法来返回这个对象的名称。但是i.__name__
不起作用。
答案 0 :(得分:1)
由于追溯表明你有一个KeyError
。由于i
是str(i)
的对象,因此您获得"<wx._core.MenuItem; proxy of <Swig Object of type 'wxMenuItem *' at 0x165aeab0> >"
,VarFiles
容器中不存在此类密钥。
它与for循环或你编写列表的方式没有任何关系。
答案 1 :(得分:1)
使用单个案例分解。这个错误在哪里?
s = str(a)
v = VarFiles[s]
w = wx.Bitmap(v)
a.SetBitmap(w)
答案 2 :(得分: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]