Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 回路中的接线盒填料速度缓慢_Python_Tkinter - Fatal编程技术网

Python 回路中的接线盒填料速度缓慢

Python 回路中的接线盒填料速度缓慢,python,tkinter,Python,Tkinter,我正在运行一个缓慢的过程,用我的脚本编写的LaTeX构建一组PDF PDF内置在for循环中。我想显示一个状态窗口,为循环经过的每个学生添加一行,以便您可以看到进度。我一直在用print来实现这一点,但我想要的是与我移动到的Tkinter接口很好地集成的东西 我有这个: ReStatuswin = Toplevel(takefocus=True) ReStatuswin.geometry('800x300') ReStatuswin.title("Creating Reassessments..

我正在运行一个缓慢的过程,用我的脚本编写的LaTeX构建一组PDF

PDF内置在for循环中。我想显示一个状态窗口,为循环经过的每个学生添加一行,以便您可以看到进度。我一直在用
print
来实现这一点,但我想要的是与我移动到的Tkinter接口很好地集成的东西

我有这个:

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窗口本身)

你知道是什么导致了显示延迟吗


谢谢

是的,据我所知,有两个问题。首先,您没有使用每个新条目更新显示。其次,您不是用按钮触发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()

是的,据我所知,有两个问题。首先,您没有使用每个新条目更新显示。其次,您不是用按钮触发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()

尝试在每次插入行后调用Rebox2.w.update\u idletasks()。更新显示中的某些任务(如调整窗口小部件的大小和重画窗口小部件)称为空闲任务,因为它们通常被推迟到应用程序处理完事件之后。这将强制在应用程序正常空闲之前发生。如果您在循环之前调用它,它应该会使ReBox2窗口本身更快地出现。@martineau感谢您的建议。它不喜欢.w.update;它是一个多列表框,而不是标准的列表框,所以这可能是问题所在。我拿出了.w,它运行了,但没有更新得更快。对不起,这是个打字错误。本应是
Rebox2.update_idletasks()
——即没有
.w
。尝试在每次插入行后调用
Rebox2.w.update_idletasks()
。更新显示中的某些任务(如调整窗口小部件的大小和重画窗口小部件)称为空闲任务,因为它们通常被推迟到应用程序处理完事件之后。这将强制在应用程序正常空闲之前发生。如果您在循环之前调用它,它应该会使ReBox2窗口本身更快地出现。@martineau感谢您的建议。它不喜欢.w.update;它是一个多列表框,而不是标准的列表框,所以这可能是问题所在。我拿出了.w,它运行了,但没有更新得更快。对不起,这是个打字错误。本来应该是
Rebox2.update_idletasks()
——也就是说,没有
.w
。整个过程实际上是由一个按钮触发的;所有这些都在一个按钮调用的函数中,这个MLB是在按下按钮时生成的。长话短说,不过
.update()
做到了-它的工作方式正是我一直想要的-谢谢!整个过程实际上是由一个按钮触发的;所有这些都在一个按钮调用的函数中,这个MLB是在按下按钮时生成的。长话短说,不过
.update()
做到了-它的工作方式正是我一直想要的-谢谢!