1

次のコードがあります。

from Tkinter import *

root = Tk()

def count():
    for i in range(300):
        Display.configure(text = 'The current number is: '+str(i))

Button = Button(root, text = 'Start', command = count)
Button.pack()

Display = Label(root)
Display.pack()

root.mainloop()

「開始」ボタンをクリックした後、カウント中に現在の数を表示したいのですが、機能しません。カウントが終了した後にのみ番号を表示するため、カウント後には「現在の番号は: 299」のみが表示されます。(これのポイントは、コードの現在の状態を表示する方法を知りたいということです。(特定のファイルを特定の場所にコピーするのではなく、特定のファイルを収集するアプリケーションを作成する必要があり、現在のファイルを表示する必要があります)アプリケーションは、現在のファイルを表示することを除いて動作します. 上記のコードで表示をテストしようとしました.)

4

1 に答える 1

1

あなたのコード例では、問題は、まず第一に、ループ内で表示を更新する変更がないことです。次に、更新する場合、最後以外の番号を表示するのが速すぎます。

簡単な修正はroot.update_idletasks()、表示に変更を加えて更新するように呼び出すことです。

from Tkinter import *
import time

root = Tk()

def count():
    for i in range(300):
        Display.configure(text = 'The current number is: '+str(i))
        root.update_idletasks()
        time.sleep(0.01) # just to see something

Button = Button(root, text = 'Start', command = count)
Button.pack()

Display = Label(root)
Display.pack()

root.mainloop()

おそらくより良い方法は、コルーチン (ここではデコレータにラップしています) を使用することですafter_idle:

import time
from Tkinter import *

root = Tk()

def updatesdisplay(func):
    def driver(iterator):
        try: next(iterator)
        except StopIteration: pass
        else: root.after_idle(driver, iterator)
    def wrapped():
        driver(func())
    return wrapped

@updatesdisplay
def count():
    for i in range(300):
        time.sleep(0.005) # just to see something
        Display.configure(text = 'The current number is: '+str(i))
        yield # chance to update display here

Button = Button(root, text = 'Start', command = count)
Button.pack()

Display = Label(root)
Display.pack()

root.mainloop()
于 2013-08-30T08:41:40.113 に答える