###前提・実現したいこと
Pyhonで以下のようなプログラムを作成しています。
・キャンバス上に赤色に塗りつぶした円をひとつ描画する。
・赤色に塗りつぶした円の内部をクリックした場合、その円の色を緑色に変える。
・緑色に塗りつぶした円の内部をクリックした場合、その円の色を青色に変える。
・青色に塗りつぶした円の内部をクリックした場合、その円の色を赤色に変える。
・円の外側をクリックしても何もしない。
最初のクリックで赤色に塗りつぶした円を描画し、キャンバス上のどこかをクリックした際に、円の塗りつぶし色を変える、というところまでは作ることができたのですが、円の内部の範囲の指定がうまくいきません。
###発生している問題・エラーメッセージ
エラーメッセージ以前に問題が解けません。
###課題のヒントで与えられた疑似コード
クリックされたとき(イベント情報): IF クリックされた位置が円の外側: RETURN IF 現在の色が赤: 円を緑に塗りつぶす 現在の色を緑に設定する ELSE IF 現在の色が緑: 円を青に塗りつぶす 現在の色を青に設定する ELSE IF 現在の色が青: 円を赤に塗りつぶす 現在の色を赤に設定する
###試したこと
Python
1from tkinter import * 2 3tk = Tk() 4c = Canvas(tk, width = 400, height = 300) 5c.pack() 6 7color = "red" 8 9def on_click(event): 10 global color 11 x = event.x 12 y = event.y 13 c.create_oval(20, 20, 150, 150, fill = color) 14 if (x-20)*(x-20) + (y-20)*(y-20) > 150*150: 15 return 16 if color == "red": 17 c.create_oval(20, 20, 150, 150, fill = color) 18 color = "blue" 19 elif color == "blue": 20 c.create_oval(20, 20, 150, 150, fill = color) 21 color = "green" 22 elif color == "green": 23 c.create_oval(20, 20, 150, 150, fill = color) 24 color = "red" 25c.bind("<Button-1>",on_click) 26 27tk.mainloop()
↑このままだと円の外でクリックしても色を変えることができてしまうのです。
###補足情報(言語/FW/ツール等のバージョンなど)
使用ツール:Python3.5.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/17 12:54