Python3.7 Tkinter 処理が遅くなる
勉強でtkinterを使っていて、3色のボールのアニメーションを作る演習をしてます
###しかしそのコードをtag管理で画面から消したものをdeleteするように改変してもメモリの圧迫が消えずに固まって'force quit'するしか無くなってしまいます。
###どうしてこれではメモリ食べる量が増えていくんでしょうか?どう管理すれば一度使ったものは退場いただけるのでしょうか?
よろしくおねがいします。
python
1 #coding:utf-8 2import tkinter as tk 3 4r = 20 5balls = [ 6 {'x':400, 'y':300, 'dx': 1, 'dy': 1, 'color':'red', 'tag': 'redTag',}, 7 {'x':200, 'y':100, 'dx': -1, 'dy': 1, 'color': 'green','tag': 'greenTag',}, 8 {'x':100, 'y':200, 'dx': 1, 'dy': -1, 'color': 'blue','tag': 'blueTag',}, 9] 10# tagですべて消してるはずなのにどんどん重くなって固まってしまう。どこに欠点が? 11def move(): 12 global balls, r 13 for b in balls: 14 # 前の位置情報の円を(tagで)消して, 15 canvas.delete(b['tag']) 16 canvas.create_oval( 17 b['x'] - r, b['y'] - r, 18 b['x'] + r, b['y'] + r, 19 fill = 'white', width = 0, 20 ) 21 #座標を更新して, 22 b['x'] += b['dx'] 23 b['y'] += b['dy'] 24 25 if b['x'] >= canvas.winfo_width(): 26 b['dx'] = -1 27 if b['x'] <= 0: 28 b['dx'] = 1 29 30 if b['y'] >= canvas.winfo_height(): 31 b['dy'] = -1 32 if b['y'] <= 0: 33 b['dy'] = 1 34 35 #次の円を描く, RED, GREEN, BLUEの3種類生成される. 36 canvas.create_oval( 37 b['x'] - r, b['y'] - r, 38 b['x'] + r, b['y'] + r, 39 fill = b['color'], width = 0, 40 tag = b['tag'], 41 ) # tag同じのをつけるとblueのものしか出ない。 42 root.after(10, move) 43 44root = tk.Tk() 45root.geometry('600x400') 46 47canvas = tk.Canvas(root, width = 600,height = 400, bg = 'white') 48canvas.place(x = 0, y = 0) 49 50root.after(10,move) 51root.mainloop() 52
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/27 04:12