Tkinter: Updating Labels mid-loop

℡╲_俬逩灬. 提交于 2019-12-09 21:21:26

问题


I would like to update a Label in my GUI to be a sort of progress bar, display how complete a data transfer is.

Everywhere I look, people say to use the textvariable option of Label and then to set the string and the label updates. This does not work for me. The label updates at the end of the data collection loop. I don't know too much about programming in depth but I imagine that Python is not refreshing Tkinter until after it is finished with the data collection loop rather than mid loop.

Here's the data collection loop:

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)

My question is: Is there some sort of command that will update the Label in the GUI in realtime?


回答1:


Short answer is to call update_idletasks. This works because widget updating is handled as an idle task. These normally get executed by the event loop but you can cause them to be called vial update_idletasks.

For a little more background, see the answers to the question How do widgets update in Tkinter?, or just search for update_idletasks on this site.



来源:https://stackoverflow.com/questions/7125398/tkinter-updating-labels-mid-loop

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!