1

スクリプトによってまとめられた 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 ウィンドウ自体と共に) すべて表示されます。

表示の遅延の原因について何か考えはありますか?

ありがとう!

4

1 に答える 1

1

はい、私が知る限り、2 つの問題があります。まず、新しいエントリごとに表示を更新していません。次に、ボタンで 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 に答える