質問: 'step') c0.pack() c0.update() time.sleep(0.1) c0.delete('step') ```
回答: 高度すぎる(!)質問です。泣きながら分かる範囲で回答します。 windows上のGUI部品(今回ですとTkinter)は基本的に「ウィンドウを選択して移動」中=ドラッグ中には処理を停止します。ドラッグ中も処理を動かしたいなら何かしらの対策が必要です。 Tkinterは一定時間ごとに処理をする仕組み(after関数)を持っていますので、文字を書き換える部分を一定時間毎に呼び出せばドラッグ中も動作します。お試しに改造したコードはこのような感じです。 ``` #python3コード from tkinter import * # python3なのでmodule名が小文字化 #step数を書き換える部分 def show_step(): global var var += 1 if(var > 100): root.destroy() # step100で終了 else: c0.delete("step") step = 'step=' + str(var) c0.create_text(150, 25, text=step, font=('FixedSys', 18), tags='step') c0.pack() c0.update() root.after(100, show_step) #0.1秒ごとにshow_stepが呼び出される=画面が書き換えられる if __name__ == "__main__": root = Tk() c0 = Canvas(root, width = 300, height = 50) var = 0 show_step() # forループの部分はshow_step関数にします root.mainloop() # windowを保持する ``` afterの使い方は下記が参考になりました。 * お気楽 Python/Tkinter 入門 ### (ご参考)重い技術資料 UIスレッドとワーカースレッドの分離問題です * Windows アプリケーションのハング状態の防止.aspx) * Part 1. Windows フォームのマルチスレッド処理の基礎 * stack_overflowの記事 * DXライブラリ掲示板での話題(No.10) > > ウインドウのサイズを変更している途中もプログラムが一時停止しないようにするためには > > 時間経過処理や描画処理をメインスレッドとは別のスレッドで行う必要があります > > ( ウインドウのサイズを変更している間、ProcessMessage 関数から処理が戻ってこないため ) > > > ### その他 ubuntu(というかX Window System?)のGUI部品の仕組みについては存じ上げません。 しかし、特に対策せずにドラッグ中も処理が動くということは素晴らしいです。