teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

説明捕捉

2020/04/02 09:28

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -29,6 +29,11 @@
29
29
 
30
30
  ```
31
31
  def on_click(event):
32
+ """
33
+ やっていることは、bindで呼び出された時の引数 (event)
34
+ と、ch2.callback が必要とする引数 (self, evnent) の橋渡しです。
35
+ """
36
+
32
37
  # self は外側のスコープから参照
33
38
  return ch2.callback(self, event)
34
39
 
@@ -37,6 +42,8 @@
37
42
 
38
43
  という風に、`def callback(self, event):` に引数を合わせる為の式になります。
39
44
 
45
+ def を使ってますが、関数内で使って大丈夫です。
46
+ self.nb.bind の直前に、インデントは揃えて。
40
47
 
41
48
  ----
42
49
  ## 改善策: 分割方法について、

3

lambda を使わない表記を追加

2020/04/02 09:28

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -28,9 +28,11 @@
28
28
  `lambda event: ch2.callback(self, event)` は関数に直すと
29
29
 
30
30
  ```
31
- def func(event):
31
+ def on_click(event):
32
32
  # self は外側のスコープから参照
33
33
  return ch2.callback(self, event)
34
+
35
+ self.nb.bind('<ButtonRelease-1> ', on_click)
34
36
  ```
35
37
 
36
38
  という風に、`def callback(self, event):` に引数を合わせる為の式になります。

2

説明補足

2020/04/02 09:20

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -20,8 +20,8 @@
20
20
 
21
21
  **追記: 問題点について**
22
22
 
23
- - 通常の関数として使う場合、引数 self が必要
23
+ - メソッドをクラスの外に出し、通常の関数として使う場合、引数 self が必要
24
- - bind で登録する関数には、引数 event が渡される
24
+ - bind で登録した関数には、呼び出し時に引数 event が渡される
25
25
 
26
26
  と、引数が一致しない為に起こっています。
27
27
 

1

問題点についての解説を追記

2020/04/02 09:18

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -18,7 +18,25 @@
18
18
  callback 側は `def callback(self,event):` で受けます。
19
19
 
20
20
 
21
+ **追記: 問題点について**
21
22
 
23
+ - 通常の関数として使う場合、引数 self が必要
24
+ - bind で登録する関数には、引数 event が渡される
25
+
26
+ と、引数が一致しない為に起こっています。
27
+
28
+ `lambda event: ch2.callback(self, event)` は関数に直すと
29
+
30
+ ```
31
+ def func(event):
32
+ # self は外側のスコープから参照
33
+ return ch2.callback(self, event)
34
+ ```
35
+
36
+ という風に、`def callback(self, event):` に引数を合わせる為の式になります。
37
+
38
+
39
+ ----
22
40
  ## 改善策: 分割方法について、
23
41
 
24
42
  単一のファイルに書かれた状態から