Tkinter:在循环中更新标签

发布于 2024-11-30 20:43:22 字数 962 浏览 1 评论 0原文

我想将 GUI 中的标签更新为进度条,显示数据传输的完成程度。

在我看来,人们都说使用 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 中的标签?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

故事灯 2024-12-07 20:43:22

简短的答案是调用update_idletasks。这是可行的,因为小部件更新是作为空闲任务处理的。这些通常由事件循环执行,但您可以使它们被称为 vial update_idletasks

有关更多背景信息,请参阅问题的答案小部件如何在 Tkinter 中更新?,或者仅在此站点上搜索 update_idletasks

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文