質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1216閲覧

Python, Tkinterで処理が重くなる

Kaede0902

総合スコア32

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/12/26 18:26

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

この箇所で白い円が溜まってってるっぽいです。tagで消すようにする前の名残でしょうか。

# 前の位置情報の円を(tagで)消して, canvas.delete(b['tag']) canvas.create_oval( b['x'] - r, b['y'] - r, b['x'] + r, b['y'] + r, fill = 'white', width = 0, )

投稿2018/12/26 19:04

set0gut1

総合スコア2413

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kaede0902

2018/12/27 04:12

そのとうりでした!!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問