简介:我使用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)
有什么想法吗?
答案 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>