TKinter秤和GUI更新

时间:2017-06-14 01:23:23

标签: python tkinter

我正在尝试使用tkinter创建一个包含缩放按钮等的GUI。 现在,我有这个量表的集合。我知道可以使用scale.set()更新比例 现在,我有一个[[1,2,3,4,5],[5,4,3,2,1],[3,3,3,3,3]]形式的列表。

我想浏览列表中的每个元素(例如[1,2,3,4,5])并使用此元素的值(也是列表)更新比例

所以我做了

def runMotion():
    #r=3
    for n in range(len(list)):
        print(list[n])
        for count in range(5):
            print(list[n][count])
            motorList[count].scale.set(list[n][count])
            #motorList[count].moveTo(list[n][count])
        time.sleep(5)

这里motorList是一个类数组,每个类都有一个比例,因此motorList[count].scale

问题是GUI(比例尺)没有更新,除了最后一个(在我们的例子中[3,3,3,3,3]) GUI在执行时被冻结,并且只有最后的“运动”反映在比例值中。

我是python的初学者,特别是做GUI,我很感激这里的建议

1 个答案:

答案 0 :(得分:0)

问题是你正在使用阻止TK事件循环的“for”循环。这意味着事情是由您的程序计算的,但GUI不会更新。请尝试以下方法:

list = [[1,2,3,4,5],[5,4,3,2,1],[3,3,3,3,3]]

def runMotion(count):
    if len(list) == count:
        return
    print(list[count])
    for index,n in enumerate(list[count]):
        print(index,n)
        motorList[index].set(n)
        #motorList[count].moveTo(list[n][count])
    root.after(5000, lambda c=count+1: runMotion(c))

root = Tk()
motorList = []
for i in range(1,6):
    s = Scale(root, from_=1, to=5)
    s.grid(row=i-1)
    motorList.append(s)
runMotion(0)
root.mainloop()