簡體   English   中英

為什么我的代碼不起作用?

[英]Why my code doesn't work?

為什么這不起作用?

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__不起作用。

如回溯所示,您有一個KeyError 因為當執行str(i)i是一個對象,所以您會得到"<wx._core.MenuItem; proxy of <Swig Object of type 'wxMenuItem *' at 0x165aeab0> >" ,因此在VarFiles容器中不存在這樣的鍵。

它與for循環或編寫列表的方式無關。

使用一個案例將其分解。 錯誤在哪里?

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

這就是我“”“”“固定”“”“我的代碼的方式:

    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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM