如何使用Python创建多个tkinter Scale小部件的“数组”?

时间:2013-08-27 17:26:59

标签: python tkinter widget tkinter-scale

我正在尝试使用Python 3.2.3和tkinter模块创建GUI。我需要一个Scale窗口小部件的“数组”,但在我的生活中不能想出如何返回值,除非通过一次创建一个Scale窗口小部件并为每个窗口小部件分别设置一个函数通过其command关键字参数传递var

我可以循环创建窗口小部件,并根据需要增加行和列参数,但无法弄清楚如何检索Scale窗口小部件的值。

在“Basic”中,每个小部件都有一个可用于解决它的索引,但我无法找到在Python中实现类似的东西。更糟糕的是 - 只使用一个Scale小部件,我使用了:

from Tkinter import *

master = Tk()

w = Scale(master, from_=0, to=100)
w.pack()

w = Scale(master, from_=0, to=200, orient=HORIZONTAL)
w.pack()

mainloop()


#To query the widget, call the get method:

w = Scale(master, from_=0, to=100)
w.pack()

print w.get()

得到了答复:

AttributeError: 'NoneType' object has no attribute 'get'

我假设这是某种版本问题。

1 个答案:

答案 0 :(得分:1)

您确定使用的是Python 3吗?你的例子是Python 2。 这个简单的例子适用于1个小部件:

from tkinter import *
master = Tk()
w = Scale(master, from_=0, to=100,command=lambda event: print(w.get())) 
w.pack()
mainloop()

使用一系列小部件,您可以将它们放在列表中

from tkinter import *
master = Tk()
scales=list()
Nscales=10
for i in range(Nscales):
    w=Scale(master, from_=0, to=100) # creates widget
    w.pack(side=RIGHT) # packs widget
    scales.append(w) # stores widget in scales list
def read_scales():
    for i in range(Nscales):
        print("Scale %d has value %d" %(i,scales[i].get()))
b=Button(master,text="Read",command=read_scales) # button to read values
b.pack(side=RIGHT)
mainloop()

我希望这就是你想要的。

JPG