PFF、実際のコードなしで伝えるのは難しいの私のサンプルですが、あなたの問題はそのTkinterののGUIは通常、自分のメインループが完全に動作する実行している必要があるようです。 重度のコールバックを使用すると、tkinterは、コールバックが戻るためのイベントループ待機を停止し、ファイルのコピーは重くて長時間の操作です。
それで解決策は可能な限りメインループから切り離すことです。一般的な方法は、別のスレッドでコピー操作を開始することです。あなたが_threadまたはスレッドでそうすることができ、第二には、単純であるように思わ:このような
def copy_callback(from_, to, lock):
th = threading.Thread(target=copy_thread, args=(from_, to, lock))
th.start()
def copy_thread(from_, to, lockobj):
with lockobj:
shutil.copy(from_, to)
root = tkinter.Tk()
lock = threading.Lock() # this one monitores finish of copy operation
tkinter.Button(root, text='start copy', command=lambda: copy_callback(src, dst, lock)).pack()
root.mainloop()
何かが、それは(必要に応じて独自のロジックを追加することができます)例外をコピー処理しません。そして、GUIの操作の終了を知らせるためにロックの状態を確認する必要があります(たとえば、tkiterのafterメソッドを使用したチェックコールバック)
def check_callback(inst, lock, waittime):
def check():
if lock.acquire(blocking=False):
inst['text'] = 'Success!'
lock.release()
else:
inst.after(waittime, func=check)
return check
l = tkinter.Label(root, text='Copying...')
l.pack()
check_callback(l, lock, 100)()
常にあなたのコードを投稿してください! – Jonas
私はシャットルからのコピーコマンドを持つパラメータを持たない単純なfuntionです。 –
これはあなたの問題を解決するかどうか:http://stackoverflow.com/questions/11756802/leave-some-code-running-while-executing-more – Jonas