質問: 下記のコードで分からない所があります ``` from tkinter import * import tkinter.messagebox as msgbox def main(): global cv win=Tk() cv=Canvas(win,width=400,height=300) cv.pack() cv.bind("<1>",canvas_click) win.mainloop() def canvas_click(e): global cv mx=e.x my=e.y cv.create_oval( mx-10,my-10,mx+10,my+10, fill="red") main() ``` 関数canvas_clickについてなんですが 関数を定義した時引数にeと記述していますが、main()関数内でcv.bind("<1>",canvas_click) でcanvas_clickを記述した時、canvas_clickに何か引数を渡しているわけでもないのに 何故、mx=***e.x***とmy=***e.y***といった記述でマウスのx座標、y座標が代入出来るんでしょうか? そもそもe.xとe.yという記述はeという変数が持ってるデータアトリビュートという様な書き方と似てますけど 上記の式ではeは何も持ってない筈なんじゃないでしょうか?
回答: > > canvas_clickに何か引数を渡しているわけでもないのに > > 何故、mx=e.xとmy=e.yといった記述でマウスのx座標、y座標が代入出来るんでしょうか? > > 上記の式ではeは何も持ってない筈なんじゃないでしょうか? > > > Pythonが渡してきます(リファレンス)。 なお、`cv.bind("<1>",canvas_click)`では、**関数自体**を引数としています。この行を実行した段階では、`canvas_click`は実行されません。