<B1-Motion>を使用して線を書く動作と背景の色が範囲によって変わる動作をしたいです。
しかし<B1-Motion>を二つ使用するとどちらかしか実行できません。
そもそも<B1-Motion>で二つの関数を動かすことは不可能なのでしょうか?
Python
import tkinter from PIL import Image, ImageDraw from tkinter import filedialog import math import time class Application(tkinter.Frame): def __init__(self, master=None): super().__init__(master) self.master = master self.master.title('tkinter canvas trial') self.pack() self.create_widgets_Line() self.setup() self.changebg_flag = False def create_widgets_Line(self): self.vr = tkinter.IntVar() self.vr.set(1) self.test_canvas = tkinter.Canvas(self, bg="#fff", width=1400, height=700) self.test_canvas.grid(row=1, column=0, columnspan=4) self.test_canvas.bind('<B1-Motion>',self.paint)#押されたときに取得した位置と現在のマウスカーソル位置で移動距離を計算し、再配置 self.test_canvas.bind('<ButtonRelease-1>', self.reset)#次に画面をタップする座標を調整する(保持していた座標をクリアする) button3 = tkinter.Button(root, text = "線を消す",command=self.clear_canvas) #ボタンWidgetを生成 button3.place(x=5, y=65) #ボタンを配置 #------------背景チェンジ------------------------------ self.button_changebg=tkinter.Button(root,text="背景変化") self.button_changebg.place(x=160,y=5) self.button_changebg.config(state="disabled") self.button_changebg.bind("<Button-1>", self.toggle_changebg) self.test_canvas.bind('<B1-Motion>',self.changebg)#ここを消すと線は書けるが、背景が変わらない。。。しかしここを付け加えると背景は変わるが線は引けない。。。 def toggle_changebg(self, _): self.changebg_flag = not self.changebg_flag self.button_changebg.config(state=["disabled", "normal"][self.changebg_flag]) def changebg(self, event): if not self.changebg_flag: return if event.y<100: self.test_canvas['bg']='gray40' elif 100<event.y<250: self.test_canvas['bg']='gray0' elif 250<event.y<400: self.test_canvas['bg']='gray40' elif 400<event.y<550: self.test_canvas['bg']='gray0' elif 550<event.y<700: self.test_canvas['bg']='gray40' def setup(self): self.line_x = None self.line_y = None self.color1 = "#000"#黒 self.eraser_on = False self.im = Image.new('RGB', (600, 600), "#fff") self.draw = ImageDraw.Draw(self.im) def change_radio(self): if self.vr.get() == 1: self.eraser_on = False else: self.eraser_on = True def clear_canvas(self):#画面に書いたものを消す self.test_canvas.delete(tkinter.ALL) def paint(self, event):#マウスで線を書く if self.eraser_on: paint_color1 = "#000" else: paint_color1 = "#000" if self.line_x and self.line_y: 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) self.draw.line((self.line_x, self.line_y, event.x, event.y), fill=paint_color1, width=5) self.line_x = event.x self.line_y = event.y def reset(self, event): self.line_x, self.line_y = None, None root = tkinter.Tk() app = Application(master=root) app.mainloop()
まだ回答がついていません
会員登録して回答してみよう