pythonのcanvasで左クリックで赤色の円を配置ができるシンプルなものを作成しました。
また、マウスホイールで画面のズーム、右クリックで全体移動を出来るように実装しています。
最初の画面のままであれば問題は無いのですが、画面のズームや、移動した後に、円を配置しようとすると
マウス位置から離れた所に円が描画されてしまいます。
どのようにすれば、画面変更した後でもマウス位置に円を描画できるのでしょうか?
import tkinter as tk from tkinter import * def pos(event): global ini_size canvas.delete("line") x_ent.delete(0, tk.END) x_ent.insert(0, event.x) y_ent.delete(0, tk.END) y_ent.insert(0, event.y) def lclick(event): canvas.create_oval(int(x_ent.get())-5, int(y_ent.get())-5, int(x_ent.get())+5, int(y_ent.get())+5,activefill = 'black',fill='red') def zoomer(event): sf = 1.1 if event.delta > 0 else 0.9 canvas.scale("all", 0,0,sf, sf) canvas.configure(scrollregion=canvas.bbox("all")) def move_start(event): canvas.scan_mark(event.x, event.y) def move_move(event): canvas.scan_dragto(event.x, event.y, gain=1) def show_width(event): window_width.delete(0, tk.END) window_width.insert(0, event.width) window = tk.Tk() window.title('サンプル') frame_T = tk.Frame(window,bd=1,relief="ridge") frame_T.grid(row=0, column=0,sticky='news') frame1_1 = tk.Frame(window,bd=1,relief="ridge") frame1_1.grid(row=1, column=0,sticky='news') frame_main = tk.Frame(window,bd=1,relief="ridge") frame_main.grid(row=2, column=0,sticky='news') y_ent = tk.Entry(frame_T) y_ent.pack(side=RIGHT) x_ent = tk.Entry(frame_T) x_ent.pack(side=RIGHT) window_width = tk.Entry(frame_T) window_width.pack(side=RIGHT) canvas = tk.Canvas(master = frame_main, height=600, width=1000, bg='white',bd=1,relief="ridge") canvas.grid(row=0, column=0,sticky='news') xsb = tk.Scrollbar(frame_main, orient="horizontal", command=canvas.xview) ysb = tk.Scrollbar(frame_main, orient="vertical", command=canvas.yview) canvas.configure(yscrollcommand=ysb.set, xscrollcommand=xsb.set) xsb.grid(row=1, column=0,sticky="ew") ysb.grid(row=0, column=1, sticky="ns") canvas.bind('<Motion>', pos) canvas.bind('<Button-1>', lclick) canvas.bind("<MouseWheel>",zoomer) canvas.bind("<ButtonPress-3>", move_start) canvas.bind("<B3-Motion>", move_move) canvas.bind("<Configure>", show_width) frame_main.grid_columnconfigure(0,weight=1) frame_main.grid_rowconfigure(0,weight=1) window.grid_columnconfigure(0,weight=1) window.grid_rowconfigure(2,weight=1) window.mainloop()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/29 05:50