2011-03-25 98 views
0

在python 3(與Tkinter的)我有以下圖象:python 3變量用在另一個變量的名字?

SqImg1 = PhotoImage(file='SqImg1.gif') 
SqImg2 = PhotoImage(file='SqImg2.gif') 
SqImg3 = PhotoImage(file='SqImg3.gif') 
SqImg4 = PhotoImage(file='SqImg4.gif') 
... 

我也有需要返回基於可變那些圖像中的一個的功能。因此,如果函數確定VAR爲1,它需要返回SqImg1 ...

def returnImage(): 
    list = ['ale', 'boo', 'boo', 'cat', 'doe', 'boo', 'eel'] 
    var = 0 
    for item in list: 
     if item == 'boo': 
      var += 1 
    return SqImg[var] 

我想上面返回SqImg3

這可能是簡單的,但我似乎無法找到什麼即時尋找與谷歌。

+1

使用的陣列(即列表)。 – kennytm 2011-03-25 19:23:37

回答

0

兩個選項

  • 創建字典和地圖字符串到實際變量。例如, d = {}; d["boo"] = img3
  • 呼叫的eval(),如果你的圖片編號正確..例如,return eval("sqlimg%d" % var)

第一個選項可能是你在找什麼,除非你有特殊情況

+2

'eval()'是邪惡的。 – 2011-03-25 19:25:37

+0

字典!應該知道這一點。效果很好,只需構建一個字符串並查看它。 'SqImg3':SqImg3 – 2011-03-25 19:37:41

2

有你錯誤直線距離:

SqImg1 = PhotoImage(file='SqImg1.gif') 
SqImg2 = PhotoImage(file='SqImg2.gif') 
SqImg3 = PhotoImage(file='SqImg3.gif') 
SqImg4 = PhotoImage(file='SqImg4.gif') 
... 

應該是:

SqImg = [ 
PhotoImage(file='SqImg1.gif'), 
PhotoImage(file='SqImg2.gif'), 
PhotoImage(file='SqImg3.gif'), 
PhotoImage(file='SqImg4.gif'), 
... 
] 

甚至:

SqImg = [ PhotoImage(file='SqImg{}.gif'.format(i) for i in range(1, n) ] 
+0

節省空間?記憶?有什麼優勢(除了看起來好多了)? – 2011-03-25 19:39:19

+2

@Thomas Kirkpatrick:避免重複。在代碼中重複自己往往表明事情可以做得更好。 – 2011-03-25 19:43:30

+0

@Thomas:看起來更好也是一個好處。在這種情況下,雖然它會給你更乾淨的代碼。 – Daenyth 2011-03-25 20:13:36

相關問題