前提・実現したいこと
ボタンを押したときにカーソルの場所によって背景の色が変化するプログラムを作成したいです。
ボタンを押したら関数に移動する動作とカーソルの場所によって背景の色を変化させる動作はできています。
発生している問題・エラーメッセージ
二つの動作を組み合わせるとこのエラーメッセージが出て色々調べてみたもののいまいちわからなかったです。どなたか教えてもらえる方お願いします。。
changebg() missing 1 required positional argument: 'event'
該当のソースコード
Python
1import tkinter 2import tkinter.ttk 3 4class Application(tkinter.Frame): 5 def __init__(self, master=None): 6 super().__init__(master) 7 self.master = master 8 self.master.title('tkinter canvas trial') 9 self.pack() 10 self.create_widgets() 11 12 def create_widgets(self): 13 14 self.test_canvas = tkinter.Canvas(self, bg='gray40', width=300, height=300, highlightthickness=0) 15 self.test_canvas.grid(row=0, column=0, rowspan=7) 16 17 18 button_changebg=tkinter.Button(root,text="背景変化",command=self.changebg) 19 button_changebg.place(x=160,y=5) 20 #self.test_canvas.bind('<B1-Motion>', self.changebg) 21 22 def changebg(self, event): 23 if event.x<100: 24 self.test_canvas['bg']='gray0' 25 elif 100<event.x<200: 26 self.test_canvas['bg']='gray40' 27 elif 200<event.x<300: 28 self.test_canvas['bg']='gray0' 29 self.test_canvas.bind('<B1-Motion>', self.changebg) 30 31 32 33 34root = tkinter.Tk() 35app = Application(master=root) 36app.mainloop()
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
「ボタンを押したときにカーソルの場所によって…」と書かれていますが、その場合、マウスカーソルの場所はボタンの内側に限定されてしまいます。それでもよろしいのでしょうか?
ボタンを押した後に、canvasの範囲でマウスカーソルの位置によって背景を変えたいです。これは不可能ですか?
ええ、それなら可能です。
もしよろしければエラー理由と修正方法を教えてもらいたいです。。
エラーの原因は、
button_changebg=tkinter.Button(root,text="背景変化",command=self.changebg)
で、command=self.changebg としているためです。この場合、引数なしで self.changebg を呼び出しますので、エラーになってしまいます。
回答1件
あなたの回答
tips
プレビュー