Tkinter:在循环中更新标签

时间:2011-08-19 17:46:17

标签: python while-loop tkinter

我想将GUI中的Label更新为一种进度条,显示数据传输的完整程度。

我看到的每个地方,人们都说要使用Label的textvariable选项,然后设置字符串和标签更新。这对我不起作用。标签在数据收集循环结束时更新。我不太了解编程的深度,但我想,在完成数据收集循环而不是中间循环之后,Python才会刷新Tkinter。

这是数据收集循环:

def getdata(self, filename):
    data=[]
    count=0
    percentage=0
    self.ser.write('$get\r\n')
    total=int(self.ser.readline().split()[0])
    line=self.ser.readline()
    while line != '':
        data.append(line)
        count+= 1
        if percentage != str(round(float(count)/total,2)):
            menu.percentage.set(str(round(float(count)/total,2)*100)+'% Completed')

            #^^^menu.percentage is the textvariable of the Label I want updated^^^#

            print str(round(float(count)/total,2)*100)+'% Completed'
        percentage = str(round(float(count)/total,2))
        line=self.ser.readline()       
    outfile=open(filename, 'w')
    outfile.writelines(data)

我的问题是:是否有某种命令可以实时更新GUI中的标签?

1 个答案:

答案 0 :(得分:5)

简短回答是致电update_idletasks。这是有效的,因为窗口小部件更新是作为空闲任务处理的。这些通常由事件循环执行,但您可以将它们称为小瓶update_idletasks

如需更多背景信息,请参阅问题How do widgets update in Tkinter?的答案,或只在此网站上搜索update_idletasks