0

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

IE

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)

有什么想法吗?

4

2 回答 2

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
于 2013-04-18T15:53:35.480 回答
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>
于 2013-04-18T16:03:37.787 回答