pythonのtkinterでOptionMenuからA1またはB1を選択し、canvas上に円を自由に配置できるものを作りました。
いくつかの円を配置した後に、タグ名ごとの座標(x,y)を登録したいのですが、canvas上の検索方法がわからず困っています。
最初の配置で座標を登録すれば良いのですが、ドラッグで移動することも検討しているため、最後に一括して情報を取得したいと考えています。
どのようにしたらcanvas上にあるタグ名の座標を取得することができるのでしょうか?
import tkinter as tk from tkinter import * import tkinter.messagebox as mb import tkinter.filedialog List_A1=[] List_B1=[] def zahyo(): #canvas内のタグ名:A1 すべての座標を、List_A1に追加したい print(List_A1) #canvas内のタグ名:B1 すべての座標を、List_B1に追加したい print(List_B1) window = tk.Tk() window.title('サンプル') frame1 = tk.Frame(window,bd=1,relief="ridge") frame1.grid(row=0, column=0,sticky='news') frame2 = tk.Frame(window,bd=1,relief="ridge") frame2.grid(row=2, column=0,sticky='news') Number = tk.StringVar() Number.set('A1') tk.OptionMenu(frame1, Number, 'A1', 'B1').pack(side=LEFT) btn = tk.Button(frame1, text='キャンバス上にある円座標の取得', command=zahyo) btn.pack(side=LEFT) cvs = tk.Canvas(frame2, height=600, width=1000, bg='white',bd=1,relief="ridge") cvs.grid(row=0, column=0,sticky='news') def lclick(event): checked = Number.get() if checked =="A1": cvs.create_oval(event.x-5, event.y-5, event.x+5, event.y+5,activefill = 'black',fill='red',tag="A1") cvs.create_text(event.x, event.y-10,text='A1') if checked =="B1": cvs.create_oval(event.x-5, event.y-5, event.x+5, event.y+5,activefill = 'black',fill='blue',tag="B1") cvs.create_text(event.x, event.y-10,text='B1') cvs.bind('<Button-1>', lclick) frame2.grid_columnconfigure(0,weight=1) frame2.grid_rowconfigure(0,weight=1) window.grid_columnconfigure(0,weight=1) window.grid_rowconfigure(2,weight=1) window.mainloop()
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2018/12/04 15:41