2013-04-18 114 views
0

簡介:我正在使用tkinter模塊創建兩個窗口,每個窗口都是獨立的類。我想獲取在第一個窗口中輸入的整數,並使用它在第二個窗口中創建該數量的標籤和條目。使用循環創建變量python 3

import tkinter 

class FirstWindow: 
    def __init__(self): 
     self.firstMaster = tkinter.Tk() 
     self.topFrame = tkinter.Frame(self.numberMaster) 
     ... 
     self.numEntry = tkinter.Entry(self.topFrame, width=10) 
     ... 
     self.averageButton = tkinter.Button(self.bottomFrame, text='next', command=self.nextstep) 
     ... 
     ... 
     tkinter.mainloop() 

    def nextStep(self): 
     self.numberItems = int(self.numEntry.get()) 
     self.average = AveragerGUI(self.numberTests) 

class AveragerGUI: 
    def __init__(self, numTests): 
     self.secondMaster = tkinter.Tk() 
     self.topFrame = tkinter.Frame(self.secondMaster) 

     for number in range(1, numTests): 
      self.frame'number' = tkinter.Frame(self.secondMaster) 

我知道,這是不行的;我只是爲了說明我想要做的事情而添加它:根據numTests參數創建多個幀。

我想用一個列表,但是這是一個問題,因爲我不知道如何將字符串轉換成變量的名字:

varList = [] 
for number in range(1, numberTests): 
    label = str(number) 
    var = 'Frame' + label 
    varList.append(var) 

有什麼想法?

回答

1

如果您使用列表,沒有必要產生名稱:

self.frames = [] 
for number in range(numTests): 
    self.frames.append(tkinter.Frame(self.secondMaster)) 

可以簡化,通過使用列表理解:

self.frames = [tkinter.Frame(self.secondMaster) for _ in in range(numTests)] 

現在,您可以通過索引來訪問每一幀:

self.frames[0] 
self.frames[1] 

或遍歷它們:

for frame in self.frames: 
    # do something with frame 
+0

是。如果您正在考慮創建任意數量的變量,則幾乎總是由某種類型的容器(如列表或字典)提供服務。 – kindall

+0

感謝您的幫助,我還無法登錄。 – ChrisMcJava

0

雖然我同意@Martijn Pieters,如果你真的想在循環內命名變量,我發現最簡單的方法是使用內建函數exec

舉個例子,如果我想使X0,X1,X2,X3等於前4項的清單,我會做以下幾點:

>>>the_list = [1, 3.4, 'g', sum] 

>>> for i in range(len(the_list)): 
... exec('x%i = the_list[%i]' % (i, i)) 

>>> print(x0) 
1 
>>> print(x1) 
3.4 
>>> print(x2) 
g 
>>> print(x3) 
<built-in function sum>