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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

3012閲覧

python tkinter canvas マウスでの作図の終了方法

Platycerium

総合スコア34

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/12/01 12:57

pythonでtkinterのcanvasを用いて、マウス操作で多角形を作成したいのですが、
画面をクリックするたびに線を引いてしまい、図形の閉じ方(作図モードの終了方法)がわかりません。
どのような方法で作図モードから抜け出したら良いでしょうか?

import tkinter as tk import os, tkinter.filedialog, tkinter.messagebox zahyo=[] def pos(event): cvs.delete("line") if len(zahyo)>0: cvs.create_line(zahyo[-2], zahyo[-1], event.x, event.y ,tag="line") def click(event): zahyo.append(event.x) zahyo.append(event.y) cvs.create_oval(event.x-5, event.y-5, event.x+5, event.y+5,fill='RED') if len(zahyo)>2: cvs.create_line(zahyo[-4], zahyo[-3], event.x, event.y) window = tk.Tk() window.title('サンプル') cvs = tk.Canvas(window, height=600, width=1000, bg='white',bd=1,relief="ridge") cvs.grid(row=0, column=0) cvs.bind('<Motion>', pos) cvs.bind('<Button-1>', click) window.mainloop()

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

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

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

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

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

guest

回答1

0

ベストアンサー

左ボタンダブルクリックに終了処理を割り当てる例です。
終了処理の具体的な処理内容は要件によりますが。

Python

1import tkinter as tk 2import os, tkinter.filedialog, tkinter.messagebox 3 4lines=[] # 線分群を複数保持 5zahyo=[] 6 7def pos(event): 8 cvs.delete("line") 9 if len(zahyo)>0: 10 cvs.create_line(zahyo[-2], zahyo[-1], event.x, event.y ,tag="line") 11 12def click(event): 13 zahyo.append(event.x) 14 zahyo.append(event.y) 15 cvs.create_oval(event.x-5, event.y-5, event.x+5, event.y+5,fill='RED') 16 if len(zahyo)>2: 17 cvs.create_line(zahyo[-4], zahyo[-3], event.x, event.y) 18 19def double_click(event): 20 lines.append(zahyo) # これまでの点群を1つの線分群として保持 21 zahyo.clear() 22 #cvs.delete("all") # 既存の描画した図形も消すなら 23 24window = tk.Tk() 25window.title('サンプル') 26 27cvs = tk.Canvas(window, height=600, width=1000, bg='white',bd=1,relief="ridge") 28cvs.grid(row=0, column=0) 29cvs.bind('<Motion>', pos) 30cvs.bind('<Button-1>', click) 31cvs.bind('<Button-3>', double_click) # ダブルクリック 32 33window.mainloop()

投稿2018/12/01 13:19

編集2018/12/01 13:44
can110

総合スコア38262

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

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

Platycerium

2018/12/01 13:30

回答ありがとうございます。 zahyoリストの中身を残したまま終了させるのは難しいでしょうか?
can110

2018/12/01 13:37 編集

現状では描画モードの開始、終了という状態を管理していませんよね? それを管理するようなつくりにしないと難しいです。 ちなみに今のつくりだと、zahyoリストの要素の有無が描画モードに対応していると考えることもできます。
can110

2018/12/01 13:44

zahyoリスト(線分群)自体を複数保持できるように回答修正しました。
Platycerium

2018/12/01 13:47

思っていた通りのことができました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問