カーソルのX座標が0~175の時とカーソルのX座標が175~350の時でマウスで書いた線のずれ方を変えるのはできました。
しかしカーソルが175~350の範囲に入った瞬間変な感じになってしまいます。
黒色の線が実際のマウスの動き方で緑色の線が異なるずれ方をするせんです。
現実:
理想:
これを滑らかに変化するようにしたいです。もしどなたかわかる方いらっしゃったら教えてほしいです。。。
Python
1import tkinter 2from PIL import Image, ImageDraw 3from tkinter import filedialog 4import math 5import time 6 7class Application(tkinter.Frame): 8 def __init__(self, master=None): 9 super().__init__(master) 10 self.master = master 11 self.master.title('tkinter canvas trial') 12 self.pack() 13 self.create_widgets_Line() 14 self.setup() 15 16 17 def create_widgets_Line(self): 18 self.vr = tkinter.IntVar() 19 self.vr.set(1) 20 self.test_canvas = tkinter.Canvas(self, bg="#fff", width=350, height=700) 21 self.test_canvas.create_line(0,0,0,700,width = 1) 22 self.test_canvas.create_line(175,0,175,700,width = 1,fill='gray31') 23 self.test_canvas.create_line(350,0,350,700,width = 1,fill='gray31') 24 self.test_canvas.grid(row=1, column=0, columnspan=4) 25 self.test_canvas.bind('<B1-Motion>', self.paint)#押されたときに取得した位置と現在のマウスカーソル位置で移動距離を計算し、再配置 26 self.test_canvas.bind('<ButtonRelease-1>', self.reset)#次に画面をタップする座標を調整する(保持していた座標をクリアする) 27 28 def setup(self): 29 self.old_x = None 30 self.old_y = None 31 self.line_x = None 32 self.line_y = None 33 self.color = "#008000"#緑 34 self.color1 = "#000"#黒 35 self.L1=1.0 36 self.L2=1.0 37 self.L3=1.0 38 self.eraser_on = False 39 self.im = Image.new('RGB', (600, 600), "#fff") 40 self.draw = ImageDraw.Draw(self.im) 41 42 def change_radio(self): 43 if self.vr.get() == 1: 44 self.eraser_on = False 45 else: 46 self.eraser_on = True 47 48 def save_canvas(self): 49 self.test_canvas.postscript(file='out.ps', colormode='color') 50 51 def paint(self, event): 52 if self.eraser_on: 53 paint_color = "#000" 54 else: 55 paint_color = "#008000" 56 57 if self.eraser_on: 58 paint_color1 = "#000" 59 else: 60 paint_color1 = "#000" 61 62 #実際の線 63 if self.line_x and self.line_y: 64 self.test_canvas.create_line(self.line_x, self.line_y, event.x, event.y, width=5.0, fill=paint_color1, capstyle=tkinter.ROUND, smooth=tkinter.TRUE, splinesteps=36) 65 self.draw.line((self.line_x, self.line_y, event.x, event.y), fill=paint_color1, width=5) 66 self.line_x = event.x 67 self.line_y = event.y 68 #ずれる線 69 y=event.y#実際のマウスx座標 70 x=event.x#実際のマウスy座標 71 if event.x<175: 72 if self.old_x and self.old_y: 73 self.L1+=0.1#ずれ方の指定 74 y-=self.L1+1 75 x+=self.L1*3 76 self.test_canvas.create_line(self.old_x, self.old_y,x, y, width=5.0, fill=paint_color, capstyle=tkinter.ROUND, smooth=tkinter.TRUE, splinesteps=36) 77 self.old_x = x#ずれる線の表示 78 self.old_y = y 79 80 elif 175<event.x<350: 81 if self.old_x and self.old_y: 82 self.L2+=0.1 83 y-=(self.L2+1)#event.y 84 x-=(self.L2*3)#event.x 85 self.test_canvas.create_line(self.old_x, self.old_y,x, y, width=5.0, fill=paint_color, capstyle=tkinter.ROUND, smooth=tkinter.TRUE, splinesteps=36) 86 self.old_x = x 87 self.old_y = y 88 89 90 def reset(self, event): 91 self.line_x, self.line_y = None, None 92 self.old_x, self.old_y = None, None 93 94root = tkinter.Tk() 95app = Application(master=root) 96app.mainloop()