使用循环创建变量python 3

时间:2013-04-18 15:51:03

标签: python class loops attributes iteration

简介:我使用tkinter模块创建两个窗口,每个窗口都是单独的类。我想获取在第一个窗口中输入的整数,并使用它在第二个窗口中创建该数量的标签和条目。

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)

有什么想法吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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>