1

我正在使用由我的脚本组合在一起的 LaTeX 构建一组 PDF 的缓慢过程。

PDF 是在 for 循环中构建的。我想显示一个状态窗口,它会为循环经过的每个学生添加一行,以便您可以看到进度。我一直在使用print.

我有这个:

ReStatuswin = Toplevel(takefocus=True)
ReStatuswin.geometry('800x300')
ReStatuswin.title("Creating Reassessments...")
Rebox2 = MultiListbox(ReStatuswin, (("Student", 15), ("Standard", 25), ("Problems", 25) ))
Rebox2.pack(side = TOP)

OKR = Button(ReStatuswin, text='OK', command=lambda:ReStatuswin.destroy())
OKR.pack(side = BOTTOM)

然后循环:

for row in todaylist:

然后,在循环内,在 PDF 制作完成后,

    Rebox2.insert(END, listy)

它可以很好地插入行,但它们仅在整个循环完成后才会显示(以及 ReBox2 窗口本身)。

关于是什么导致显示延迟的任何想法?

谢谢!

4

1 回答 1

1

是的,据我所知,有两个问题。首先,您不会使用每个新条目来更新显示。其次,您不是用按钮触发 for 循环,而是让它在启动时运行(这意味着直到循环退出后才会创建显示)。然而不幸的是,我不能真正使用你提供的代码,因为它是一个更大的东西的片段。但是,我制作了一个小脚本,应该演示如何做你想做的事:

from Tkinter import Button, END, Listbox, Tk
from time import sleep

root = Tk()

# My version of Tkinter doesn't have a MultiListbox
# So, I use its closest alternative, a regular Listbox
listbox = Listbox(root)
listbox.pack()

def start():
    """This is where your loop would go"""

    for i in xrange(100):
        # The sleeping here represents a time consuming process
        # such as making a PDF
        sleep(2)

        listbox.insert(END, i)

        # You must update the listbox after each entry
        listbox.update()

# You must create a button to call a function that will start the loop
# Otherwise, the display won't appear until after the loop exits
Button(root, text="Start", command=start).pack()

root.mainloop()
于 2013-07-26T16:44:45.360 回答